Utilizar
para todos los ejercicios que vienen a continuación el script demodb.SQL (descargar aquí).
Realizar las
siguientes clases Java:
1. Visualizar número y nombre de
todos los departamentos.
import java.sql.*;
public class Main {
public
static void main(String[] args) {
//
Propiedades
Connection
conn = null;
Statement
stmt;
ResultSet
rs;
String
url = "jdbc:mysql://localhost:3306/demodb";
String
user = "root";
String
password = "";
//
Métodos
//
Importo driver
try{
Class.forName("com.mysql.jdbc.Driver");
}
catch(ClassNotFoundException
e){
e.printStackTrace();
}
// Trabajo con base de datos
try{
conn
= DriverManager.getConnection(url, user, password);
stmt
= conn.createStatement();
rs
= stmt.executeQuery("select deptno, dname from dept");
while(rs.next()){
int
numDept = rs.getInt("deptno");
String
nombre = rs.getString("dname");
System.out.println("Departamento:
" + numDept + ". Nombre: " + nombre);
}
rs.close();
stmt.close();
}
catch(SQLException
e){
e.printStackTrace();
}
finally{
if(conn
!= null){
try{
conn.close();
}
catch(SQLException
e){
e.printStackTrace();
}
}
}
}
}
2. Modificar el nombre de un
departamento cuyo número (y nombre) se pase(n) como argumento. No utilizar
sentencias preparadas. Visualizar el número de filas afectadas.
import java.sql.*;
public class BaseDatos {
//
Propiedades
Connection
conn = null;
Statement
stmt;
String url =
"jdbc:mysql://localhost:3306/demodb";
String user
= "root";
String
password = "";
// Métodos
public void
cargarDriver(){
try{
Class.forName("com.mysql.jdbc.Driver");
}
catch(ClassNotFoundException
e){
e.printStackTrace();
}
}
public void
conectarBD(){
try{
conn
= DriverManager.getConnection(url, user, password);
}
catch(SQLException
e){
e.printStackTrace();
}
}
public void
cambiarDepto(int numDep, String newName){
int i = 0;
cargarDriver();
conectarBD();
try{
stmt = conn.createStatement();
i
= stmt.executeUpdate("UPDATE DEPT SET DNAME = '" + newName + "'
WHERE DEPTNO = " + numDep + ";");
stmt.close();
}
catch(SQLException
e){
e.printStackTrace();
}
finally{
if
(conn != null){
try{
conn.close();
}
catch(SQLException
e){
e.printStackTrace();
}
}
}
System.out.println("Filas
afectadas: " + i);
}
}
3. Realiza el ejercicio anterior
con sentencias preparadas.
import java.sql.*;
public class BaseDatos {
//
Propiedades
Connection
conn = null;
Statement
stmt;
String url =
"jdbc:mysql://localhost:3306/demodb";
String user
= "root";
String
password = "";
// Métodos
public void
cargarDriver(){
try{
Class.forName("com.mysql.jdbc.Driver");
}
catch(ClassNotFoundException
e){
e.printStackTrace();
}
}
public void
conectarBD(){
try{
conn
= DriverManager.getConnection(url, user, password);
}
catch(SQLException
e){
e.printStackTrace();
}
}
public void
cambiarDepto(int numDep, String newName){
int i =
0;
cargarDriver();
conectarBD();
try{
PreparedStatement
ps = conn.prepareStatement("UPDATE DEPT SET DNAME = (?) WHERE DEPTNO =
(?);");
ps.setString(1,
newName);
ps.setInt(2,
numDep);
i
= ps.executeUpdate();
}
catch(SQLException
e){
e.printStackTrace();
}
finally{
if
(conn != null){
try{
conn.close();
}
catch(SQLException
e){
e.printStackTrace();
}
}
}
System.out.println("Filas
afectadas: " + i);
}
}
4. Realiza el ejercicio anterior
utilizando transacciones
import java.sql.*;
public class BaseDatos {
//
Propiedades
Connection
conn = null;
Statement
stmt;
String url =
"jdbc:mysql://localhost:3306/demodb";
String user
= "root";
String
password = "";
// Métodos
public void
cargarDriver(){
try{
Class.forName("com.mysql.jdbc.Driver");
}
catch(ClassNotFoundException
e){
e.printStackTrace();
}
}
public void
conectarBD(){
try{
conn
= DriverManager.getConnection(url, user, password);
}
catch(SQLException
e){
e.printStackTrace();
}
}
public void
cambiarDepto(int numDep, String newName){
int i =
0;
cargarDriver();
conectarBD();
try{
conn.setAutoCommit(false);
// Desactivo el commit para cada sentencia
PreparedStatement
ps = conn.prepareStatement("UPDATE DEPT SET DNAME = (?) WHERE DEPTNO =
(?);");
ps.setString(1,
newName);
ps.setInt(2,
numDep);
i
= ps.executeUpdate();
conn.commit(); // Al
finalizar sentencias hago commit
conn.setAutoCommit(true); // Y
vuelvo a activar autocommit para resto de aplicación
}
catch(SQLException e){
try{
conn.rollback(); // Si algo
falla hago rollback para dejarlo como antes
}
catch(SQLException ex){
ex.printStackTrace();
}
}
finally{
if
(conn != null){
try{
conn.close();
}
catch(SQLException
e){
e.printStackTrace();
}
}
}
System.out.println("Filas
afectadas: " + i);
}
}
5. Realizar una clase para acceso
a la base de datos demodb con los siguientes
métodos. Controlar errores y
utilizar sentencias preparadas:
- Conectar a la base de datos (carga del
driver y establecimiento de
conexión).
- Insertar un departamento. El método
recibirá tres argumentos
(número,
nombre y localidad).
- El mismo que b pero recibiendo un solo argumento, un objeto de la
clase departamento. Será necesario por tanto crear una clase
departamento, con sus atributos y métodos getter y setter.
- Método que devuelva un ArrayList de objetos departamento ante la
consulta de todas las columnas de todos los departamentos de la tabla
dept
- Método que reciba un número de departamento y devuelva sus datos
mediante un objeto.
- Método que reciba un objeto departamento y actualice la tabla dept.
- Método que reciba un número de departamento y lo dé de baja.
- Ídem del anterior pero devolviendo el número de filas afectadas.
- Método que reciba un número de departamento y actualice su localidad
(segundo argumento del método). Utilizar el siguiente procedimiento:
delimiter $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `actualizaDept`(cod
INT(2), localidad VARCHAR(13))
BEGIN
UPDATE Dept SET loc=localidad WHERE deptno = cod;
END$$
delimiter ;
- Método que reciba un número de departamento y devuelva un objeto
con sus datos. Utilizar el siguiente procedimiento MySQL:
delimiter $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `consultaDepar`(in
num int(2), out name varchar(14), out local varchar(13))
begin
select dname, loc into name,local
from dept
where dept.deptno=num;
end$$
delimiter ;
- Método que reciba una cantidad y un número de departamento e
incremente el sueldo de todos los empleados de ese departamento en
esa cantidad. La actualización la realizará un procedimiento MySQL que
se creará previamente.
- Ídem del anterior pero no haciendo uso de un procedimiento MySQL
sino de un resultset.
- Método que imprima el gestor de base de datos empleado, el driver
utilizado y el usuario conectado.
- Método que imprima del esquema actual todas las tablas y vistas que
contiene, indicando además del nombre, si se trata de una tabla o una
vista.
- Ídem del anterior pero para programas almacenados
(procedimientos/funciones).
- Método que reciba un esquema y una tabla e imprima sus columnas
(nombre de la columna, tipo, tamaño y si admite o no valores nulos).
- Método que reciba un esquema y una tabla e imprima la lista de
columnas que forman la clave primaria.
- Método que reciba un esquema y una tabla e imprima la lista de todas
las claves ajenas que utilizan la clave primaria de esta tabla.
- Método que reciba una consulta (p.ej. SELECT * FROM dept) e imprima
el número de columnas recuperadas, y por cada columna el nombre,
tipo, tamaño y si admite o no nulos.
ARCHIVO
DEPARTAMENTO.JAVA
public class Departamento {
//
Propiedades
private
int numDep;
private
String nombreDep;
private
String localidad;
//
Constructor
public
Departamento(int numDep, String nombreDep, String localidad){
this.numDep
= numDep;
this.nombreDep
= nombreDep;
this.localidad
= localidad;
}
public
Departamento(){}
//
Métodos
public
void setNumDep(int n){
numDep
= n;
}
public
int getNumDep(){
return
numDep;
}
public
void setNombreDep(String n){
nombreDep
= n;
}
public
String getNombreDep(){
return
nombreDep;
}
public
void setLocalidad(String n){
localidad
= n;
}
public
String getLocalidad(){
return
localidad;
}
}
ARCHIVO
BASEDATOS.JAVA
import java.sql.*;
import java.util.ArrayList;
public class BaseDatos {
//
Propiedades
Connection
conn = null;
Statement
stmt = null;
PreparedStatement
ps = null;
ResultSet
rs = null;
CallableStatement
cs = null;
DatabaseMetaData
d = null;
String
url = "jdbc:mysql://localhost:3306/demodb";
String
user = "root";
String
password = "root";
String
driver = "com.mysql.jdbc.Driver";
//
Métodos
//
EJERCICIO A
public
void conectarBD(){
//
Cargra del Driver
try{
Class.forName(driver);
}
catch(ClassNotFoundException
e){
e.printStackTrace();
}
//
Conexión a Base de datos
try{
conn
= DriverManager.getConnection(url, user, password);
}
catch(SQLException
e){
e.printStackTrace();
}
}
// fin función conectarBD
public
void cerrarConexion(){
if
(conn != null){
try{
conn.close();
}
catch(SQLException
e){
e.printStackTrace();
}
}
}
// Fin función cerrarConexion()
//
EJERCICIO B
public
void insertarDepto(int numDep, String nombreDept, String localidad){
try{
conn.setAutoCommit(false);
// Desactivo el commit para cada sentencia
ps
= conn.prepareStatement("INSERT INTO DEPT VALUES((?),(?),(?));");
ps.setInt(1,
numDep);
ps.setString(2,
nombreDept);
ps.setString(3,localidad);
ps.executeUpdate();
conn.commit();
// Al finalizar sentencias hago commit
conn.setAutoCommit(true);
// Y vuelvo a activar autocommit para resto de aplicación
}
catch(SQLException
e){
try{
conn.rollback();
// Si algo falla hago rollback para dejarlo como antes
}
catch(SQLException
ex){
ex.printStackTrace();
}
}
finally{
if
(ps != null){
try{
ps.close();
}
catch(SQLException
e){
e.printStackTrace();
}
}
}
}
// Fin función insertarDept(x, x, x)
//
EJERCICIO C
public
void insertarDepto(Departamento depto){
Departamento
d = depto;
try{
conn.setAutoCommit(false);
ps
= conn.prepareStatement("INSERT INTO DEPT VALUES((?), (?), (?));");
ps.setInt(1,
d.getNumDep());
ps.setString(2,
d.getNombreDep());
ps.setString(3,
d.getLocalidad());
ps.execute();
conn.commit();
conn.setAutoCommit(true);
}
catch(SQLException
e){
try{
conn.rollback();
}
catch(SQLException
ex){
ex.printStackTrace();
}
}
finally{
if
(ps != null){
try{
ps.close();
}
catch(SQLException
e){
e.printStackTrace();
}
}
}
}
// Fin función insertarDept(x)
//
EJERCICIO D
public
ArrayList<Departamento> listarDepartamentos(){
Departamento
d = new Departamento();
ArrayList<Departamento>
listaDep = new ArrayList<Departamento>();
try{
stmt
= conn.createStatement();
rs
= stmt.executeQuery("SELECT * FROM DEPT");
while(rs.next()){
d.setNumDep(rs.getInt("DEPTNO"));
d.setNombreDep(rs.getString("DNAME"));
d.setNombreDep(rs.getString("LOC"));
listaDep.add(d);
}
}
catch(SQLException
e){
e.printStackTrace();
}
finally{
if
(rs != null){
try{
rs.close();
}
catch(SQLException
e){
e.printStackTrace();
}
}
if
(stmt != null){
try{
stmt.close();
}
catch(SQLException
e){
e.printStackTrace();
}
}
}
return
listaDep;
}
// Fin función listarDepartamentos()
//
EJERCICIO E
public
Departamento cogerDepartamento(int numDep){
Departamento
d = new Departamento();
try{
stmt
= conn.createStatement();
rs
= stmt.executeQuery("SELECT * FROM DEPT WHERE DEPTNO = " + numDep +
";");
while(rs.next()){
d.setNumDep(rs.getInt("DEPTNO"));
d.setNombreDep(rs.getString("DNAME"));
d.setLocalidad(rs.getString("LOC"));
}
}
catch(SQLException
e){
e.printStackTrace();
}
finally{
if
(rs != null){
try{
rs.close();
}
catch(SQLException
e){
e.printStackTrace();
}
}
if
(stmt != null){
try{
stmt.close();
}
catch(SQLException
e){
e.printStackTrace();
}
}
}
return
d;
}
// Fin función cogerDepartamento()
//
EJERCICIO F
public
void actualizarDepartamento(Departamento depto){
Departamento
d = depto;
try{
conn.setAutoCommit(false);
ps
= conn.prepareStatement("UPDATE DEPT SET DNAME = ?, LOC = ? WHERE DEPTNO =
?");
ps.setString(1,
d.getNombreDep());
ps.setString(2,
d.getLocalidad());
ps.setInt(3,
d.getNumDep());
ps.executeUpdate();
conn.commit();
conn.setAutoCommit(true);
}
catch(SQLException
e){
try{
conn.rollback();
}
catch(SQLException
ex){
ex.printStackTrace();
}
}
finally{
if
(ps != null){
try{
ps.close();
}
catch(SQLException
e){
e.printStackTrace();
}
}
}
}
// Fin función actualizarDepartamento()
//
EJERCICIO G
public
void borraDepto(int n){
try{
conn.setAutoCommit(false);
ps = conn.prepareStatement("DELETE
FROM DEPT WHERE DEPTNO = (?)");
ps.setInt(1,
n);
ps.executeUpdate();
conn.commit();
conn.setAutoCommit(true);
}
catch(SQLException
e){
try{
conn.rollback();
}
catch(SQLException
ex){
ex.printStackTrace();
}
}
finally{
if(ps
!= null){
try{
ps.close();
}
catch(SQLException
e){
e.printStackTrace();
}
}
}
}
// Fin función borrarDepto()
//
EJERCICIO H
public
int borrarDeptConFilas(int n){
int
r = 0;
try{
conn.setAutoCommit(false);
ps
= conn.prepareStatement("DELETE FROM DEPT WHERE DEPTNO = (?)");
ps.setInt(1,
n);
r
= ps.executeUpdate();
conn.commit();
conn.setAutoCommit(true);
}
catch(SQLException
e){
try{
conn.rollback();
}
catch(SQLException
ex){
ex.printStackTrace();
}
}
finally{
if(ps
!= null){
try{
ps.close();
}
catch(SQLException
e){
e.printStackTrace();
}
}
}
return
r;
}
// Fin función borrarDeptConFilas()
//
EJERCICIO I
public
void actualizarDeptCallable(int n, String localidad){
try{
conn.setAutoCommit(false);
cs
= conn.prepareCall("{call actualizaDept(?,?)}");
cs.setInt(1,
n);
cs.setString(2,
localidad);
cs.execute();
conn.commit();
conn.setAutoCommit(true);
}
catch(SQLException
e){
try{
conn.rollback();
}
catch(SQLException
ex){
ex.printStackTrace();
}
}
finally{
if
(cs != null){
try{
cs.close();
}
catch(SQLException
e){
e.printStackTrace();
}
}
}
}
// Fin función actualizarDeptCallable
//
EJERCICIO J
public
Departamento consultarDeptoCallable(int depto){
Departamento
r = new Departamento();
try{
conn.setAutoCommit(false);
cs
= conn.prepareCall("{call consultaDepar(?, ?, ?)}");
cs.setInt(1,
depto);
cs.registerOutParameter(2,
java.sql.Types.VARCHAR);
cs.registerOutParameter(3,
java.sql.Types.VARCHAR);
cs.execute();
r.setNumDep(depto);
r.setNombreDep(cs.getString(2));
r.setLocalidad(cs.getString(3));
conn.commit();
conn.setAutoCommit(true);
}
catch(SQLException
e){
try{
conn.rollback();
}
catch(SQLException
ex){
ex.printStackTrace();
}
}
finally{
if
(cs != null){
try{
cs.close();
}
catch(SQLException
e){
e.printStackTrace();
}
}
}
return
r;
}
// Fin función consultarDeptoCallable()
//
EJERCICIO K
public
void actualizarSalarios(double cantidad, int depto){
try{
conn.setAutoCommit(false);
cs
= conn.prepareCall("{call actualizarSalarios(?,?)}");
cs.setDouble(1,
cantidad);
cs.setInt(2,
depto);
cs.execute();
conn.commit();
conn.setAutoCommit(true);
}
catch(SQLException
e){
try{
conn.rollback();
}
catch(SQLException
ex){
ex.printStackTrace();
}
}
finally{
if
(cs != null){
try{
cs.close();
}
catch(SQLException
e){
e.printStackTrace();
}
}
}
}
// Fin función actualizarSalarios()
//
EJERCICIO L
public
void actualizarSalariosResultSet(double cantidad, int depto){
try{
conn.setAutoCommit(false);
stmt
= conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE);
rs
= stmt.executeQuery("SELECT * FROM EMP WHERE DEPTNO = " + depto +
";");
rs.beforeFirst();
// Situo al principio por si acaso
while
(rs.next()){
double
salario = rs.getDouble("SAL") + cantidad;
rs.updateDouble("SAL",
salario);
rs.updateRow();
}
conn.commit();
conn.setAutoCommit(true);
}
catch(SQLException
e){
try{
conn.rollback();
}
catch(SQLException
ex){
e.printStackTrace();
}
}
finally{
if
(rs != null){
try{
rs.close();
}
catch(SQLException
e){
e.printStackTrace();
}
}
if
(stmt != null){
try{
stmt.close();
}
catch(SQLException
e){
e.printStackTrace();
}
}
}
}
// Fin función actualizarSalariosResultSet()
//
EJERCICIO M
public
void verInfo(){
if
(conn != null){
try{
d
= (DatabaseMetaData)conn.getMetaData();
System.out.println("Gestor:
" + d.getDatabaseProductName());
System.out.println("Usuario
conectado: " + d.getUserName());
System.out.println("Driver
utilizado: " + d.getDriverVersion());
}
catch(SQLException
e){
e.printStackTrace();
}
}
}
// Fin función verInfo()
public
void tablasAndVistas(){
try{
stmt
= conn.createStatement();
rs
= stmt.executeQuery("SHOW FULL TABLES;");
while
(rs.next()){
if
(rs.getString(2).equals("BASE TABLE"))
System.out.println(rs.getString(1)
+ ": TABLA");
if
(rs.getString(2).equals("VIEW"))
System.out.println(rs.getString(1)
+ ": VISTA");
}
}
catch(SQLException
e){
e.printStackTrace();
}
finally{
if
(rs != null){
try{
rs.close();
}
catch(SQLException
e){
e.printStackTrace();
}
}
if
(stmt != null){
try{
stmt.close();
}
catch(SQLException
e){
e.printStackTrace();
}
}
}
}
// Fin funcion tablasAndVistas()
//
EJERCICIO O
public
void procedimientosAndFunciones(){
try{
stmt
= conn.createStatement();
rs
= stmt.executeQuery("SHOW PROCEDURE STATUS");
while
(rs.next()){
System.out.println(rs.getString(2)
+ ": PROCEDIMIENTO");
}
rs
= stmt.executeQuery("SHOW FUNCTION STATUS");
while
(rs.next()){
System.out.println(rs.getString(2)
+ ": FUNCIÓN");
}
}
catch(SQLException
e){
e.printStackTrace();
}
finally{
if
(rs != null){
try{
rs.close();
}
catch(SQLException
e){
e.printStackTrace();
}
}
if
(stmt != null){
try{
stmt.close();
}
catch(SQLException
e){
e.printStackTrace();
}
}
}
}
// Fin función procedimientosAndFunciones()
//
EJERCICIO P
public
void infoTablas(String esquema, String tabla){
if
(conn != null){
try{
d
= (DatabaseMetaData)conn.getMetaData();
rs
= d.getColumns(conn.getCatalog(), esquema, "%", null);
System.out.println("Esquema\tNombre\n");
while(rs.next()){
System.out.println("Nombre:
" + rs.getString(3) + "\tTamaño: " + rs.getString(7) +
"\tTipo: " + rs.getString(6) + "\tValores nulos: " +
rs.getString(18));
}
}
catch(SQLException
e){
e.printStackTrace();
}
finally{
if
(rs != null){
try{
rs.close();
}
catch(SQLException
e){
e.printStackTrace();
}
}
}
}
}
// Fin función infoTablas()
//
EJERCICIO Q
public
void infoTablasPrimarias(String esquema, String tabla){
if
(conn != null){
try{
d
= (DatabaseMetaData)conn.getMetaData();
rs
= d.getPrimaryKeys(conn.getCatalog(), esquema, tabla);
System.out.println("Schema\tTabla\tClave
Primaria");
while
(rs.next()){
System.out.println(rs.getString(1)
+ "\t" + rs.getString(3) + "\t" + rs.getString(4));
}
}
catch(SQLException
e){
e.printStackTrace();
}
finally{
if
(rs != null){
try{
rs.close();
}
catch(SQLException
e){
e.printStackTrace();
}
}
}
}
}
// Fin función infoTablasPrimarias()
//
EJERCICIO R
public
void infoTablasAjenas(String esquema, String tabla){
if
(conn != null){
try{
d
= (DatabaseMetaData)conn.getMetaData();
rs
= d.getExportedKeys(conn.getCatalog(), esquema, tabla);
while(rs.next()){
System.out.println(rs.getString(1)
+ "\t" + rs.getString(2) + "\t" + rs.getString(3) +
"\t" + rs.getString(4));
}
}
catch(SQLException
e){
e.printStackTrace();
}
finally{
if
(rs != null){
try{
rs.close();
}
catch(SQLException e){
e.printStackTrace();
}
}
}
}
}
// Fin función infoTablasAjenas()
//
EJERCICIO S
public
void infoConsulta(String select){
if
(conn != null){
try{
stmt
= conn.createStatement();
rs
= stmt.executeQuery(select);
while(rs.next()){
System.out.println(rs.getString(1)
+ "\t" + rs.getString(2) + "\t" + rs.getString(3));
}
}
catch(SQLException
e){
e.printStackTrace();
}
finally{
if
(stmt != null){
try{
stmt.close();
}
catch(SQLException
e){
e.printStackTrace();
}
}
if
(rs != null){
try{
rs.close();
}
catch(SQLException
e){
e.printStackTrace();
}
}
}
}
}
// Fin función infoConsulta()
}
ARCHIVO
MAIN.JAVA
import java.util.ArrayList;
public class Main {
public
static void main(String[] args) {
//
Propiedades
BaseDatos
bd = new BaseDatos();
Departamento
d = new Departamento(70, "POTTER", "UK");
ArrayList<Departamento>
lDep = new ArrayList<Departamento>();
//
Métodos
bd.conectarBD();
bd.insertarDepto(60,
"TOPSECRET", "QUEEN");
bd.insertarDepto(d);
lDep
= bd.listarDepartamentos();
d
= bd.cogerDepartamento(40);
bd.actualizarDepartamento(d);
bd.borraDepto(70);
System.out.println("Filas
afectadas: " + bd.borrarDeptConFilas(80));
bd.actualizarDeptCallable(70,
"HUESCA");
d
= bd.consultarDeptoCallable(40);
System.out.println(d.getNumDep()
+ d.getNombreDep() + d.getLocalidad());
bd.actualizarSalarios(1600.00,
10);
bd.actualizarSalariosResultSet(1600.00,
10);
bd.verInfo();
bd.tablasAndVistas();
bd.procedimientosAndFunciones();
bd.infoTablas("demodb",
"dept");
bd.infoTablasPrimarias("demodb",
"dept");
bd.infoTablasAjenas("demobd",
"dept");
bd.infoConsulta("SELECT
* FROM dept");
bd.cerrarConexion();
}
}
0 comments:
Publicar un comentario