bases de datos en java - intro a jdbc
DESCRIPTION
Curso de introducción al manejo de Bases de Datos en Java con JDBC.TRANSCRIPT
![Page 2: Bases de Datos en Java - Intro a JDBC](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54922adbac795949288b46bb/html5/thumbnails/2.jpg)
Índice de contenidos
Motivación del uso de Bases de DatosIntroducción a JDBCConexionesEjecución de sentencias SQLSecuencias especialesTransacciones
![Page 3: Bases de Datos en Java - Intro a JDBC](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54922adbac795949288b46bb/html5/thumbnails/3.jpg)
Motivación para usar BBDD
![Page 4: Bases de Datos en Java - Intro a JDBC](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54922adbac795949288b46bb/html5/thumbnails/4.jpg)
Enterprise Edition
Tratamiento de mayor cantidad de datosOptimización para almacenamientoOptimización para recuperaciónOptimización para manipulación
Arquitectura Cliente / ServidorConcentrar la lógica de negocio
Data independence
![Page 5: Bases de Datos en Java - Intro a JDBC](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54922adbac795949288b46bb/html5/thumbnails/5.jpg)
Introducción JDBC
![Page 6: Bases de Datos en Java - Intro a JDBC](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54922adbac795949288b46bb/html5/thumbnails/6.jpg)
Motivación JDBC
Unifi car el acceso a las Bases De datosSimilar a ODBC
![Page 7: Bases de Datos en Java - Intro a JDBC](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54922adbac795949288b46bb/html5/thumbnails/7.jpg)
Tipos de Drivers JDBC
Type 1: JDBC-ODBC Bridge driver (Bridge)Type 2: Native-API/partly Java driver (Native)Type 3: AllJava/Net-protocol driver (Middleware)Type 4: All Java/Native-protocol driver (Pure)
![Page 8: Bases de Datos en Java - Intro a JDBC](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54922adbac795949288b46bb/html5/thumbnails/8.jpg)
Necesidades
1 servidor1 base de datos1 usuario1 conector o driver1 API
![Page 9: Bases de Datos en Java - Intro a JDBC](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54922adbac795949288b46bb/html5/thumbnails/9.jpg)
Estableciendo conexión
![Page 10: Bases de Datos en Java - Intro a JDBC](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54922adbac795949288b46bb/html5/thumbnails/10.jpg)
Cargando el Driver a mano
Necesario en versiones antiguasHay que cargar el driver a mano:
Class.forName(“nombre del driver”)
![Page 11: Bases de Datos en Java - Intro a JDBC](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54922adbac795949288b46bb/html5/thumbnails/11.jpg)
DriverManager
This fully implemented class connects an application to a data source, which is specifi ed by a database URL. When this class fi rst attempts to establish a connection, it automatically loads any JDBC 4.0 drivers found within the class path. Note that your application must manually load any JDBC drivers prior to version 4.0.
![Page 12: Bases de Datos en Java - Intro a JDBC](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54922adbac795949288b46bb/html5/thumbnails/12.jpg)
Ejemplo de DriverManager
Connection conn = null;conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/test", “usuario”, “contraseña”);
![Page 13: Bases de Datos en Java - Intro a JDBC](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54922adbac795949288b46bb/html5/thumbnails/13.jpg)
Definición de origen de datos
jdbc:mysql://localhost:3306/test?opcion=1jdbc: mysql: dialectolocalhost: dirección o IP del servidortest: nombre de la base de datosopicion=1: opciones adicionales
![Page 14: Bases de Datos en Java - Intro a JDBC](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54922adbac795949288b46bb/html5/thumbnails/14.jpg)
DataSource
This interface is preferred over DriverManager because it allows details about the underlying data source to be transparent to your application. A DataSource object's properties are set so that it represents a particular data source.
![Page 15: Bases de Datos en Java - Intro a JDBC](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54922adbac795949288b46bb/html5/thumbnails/15.jpg)
Ejemplo de DataSource
ctx = new InitialContext();DataSource ds = (DataSource)ctx.lookup("jdbc/fastCoffeeDB");Connection con = ds.getConnection( "myLogin", "myPassword");
![Page 16: Bases de Datos en Java - Intro a JDBC](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54922adbac795949288b46bb/html5/thumbnails/16.jpg)
Ejemplo de DriverManager
Connection conn = null;conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/test", “usuario”, “contraseña”);
![Page 17: Bases de Datos en Java - Intro a JDBC](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54922adbac795949288b46bb/html5/thumbnails/17.jpg)
Ejercicio
Establecer conexión con la base de datosProbar los diferentes errores
Usuario/contraseña incorrectoBase de datos incorrectoServidor/puerto incorrectoSin el driver disponible…
![Page 18: Bases de Datos en Java - Intro a JDBC](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54922adbac795949288b46bb/html5/thumbnails/18.jpg)
Ejecución de secuencias SQL
![Page 19: Bases de Datos en Java - Intro a JDBC](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54922adbac795949288b46bb/html5/thumbnails/19.jpg)
Ejecución de secuencias
Clase StatementSe obtiene a partir de Connection
![Page 20: Bases de Datos en Java - Intro a JDBC](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54922adbac795949288b46bb/html5/thumbnails/20.jpg)
Tipos de Statement
Para consultas: executeQueryPara modifi caciones: executeUpdatePara ambos: executeEspeciales
Llamadas a procedimientos almacenadosPrepared statementBatch
![Page 21: Bases de Datos en Java - Intro a JDBC](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54922adbac795949288b46bb/html5/thumbnails/21.jpg)
Tipos de Statement
ExecuteQueryEjecuta SQL que devuelve resultadosDevuelve un ResulSet
![Page 22: Bases de Datos en Java - Intro a JDBC](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54922adbac795949288b46bb/html5/thumbnails/22.jpg)
Ejemplo
ResultSet rs = stmt.executeQuery(“Consulta”);while (rs.next()) {…}stmt.close();
![Page 23: Bases de Datos en Java - Intro a JDBC](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54922adbac795949288b46bb/html5/thumbnails/23.jpg)
Ejercicio
Conectarse a la base de datos de sakilaSeleccionar todos los paises de la tabla countryPor cada fi la devuelta imprimir por salida estándar números consecutivos
![Page 24: Bases de Datos en Java - Intro a JDBC](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54922adbac795949288b46bb/html5/thumbnails/24.jpg)
ResultSet
Devuelve todas las fi las seleccionadasDesconoce el número de columnas y contenido hasta la ejecución
![Page 25: Bases de Datos en Java - Intro a JDBC](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54922adbac795949288b46bb/html5/thumbnails/25.jpg)
ResultSet MetaData
ResulSetMetaDataResultSetMetaData rsm = rs.getMetaData();
for (int i = 1; i < rsm.getColumnCount() + 1; i++) {
System.out.println(rsm.getColumnName(i));
System.out.println(rsm.getColumnTypeName(i));
}
![Page 26: Bases de Datos en Java - Intro a JDBC](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54922adbac795949288b46bb/html5/thumbnails/26.jpg)
Ejercicio
Mostrar qué tipo de datos hay en la tabla “customer”
![Page 27: Bases de Datos en Java - Intro a JDBC](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54922adbac795949288b46bb/html5/thumbnails/27.jpg)
Obtener campos
Normalmente sabremos los datos que queremos obtener de la base de datosUtilizamos:
GetTipo(nombre)GetTipo(posicion)Tipo es en tipo Java.
![Page 28: Bases de Datos en Java - Intro a JDBC](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54922adbac795949288b46bb/html5/thumbnails/28.jpg)
Ejercicio
Mostrar todas las fi las con el formato:ID: valorAtributo1: valor1; Atributo2: valor2...
de la tabla “actor”
![Page 29: Bases de Datos en Java - Intro a JDBC](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54922adbac795949288b46bb/html5/thumbnails/29.jpg)
Tipos de datosCHAR StringVARCHAR StringLONGVARCHAR StringNUMERIC java.math.BigDecimalDECIMAL java.math.BigDecimalBIT booleanBOOLEAN booleanTINYINTbyteSMALLINTshortINTEGER intBIGINT longREAL fl oatFLOAT doubleDOUBLE double
BINARY byte[]VARBINARY byte[]LONGVARBINARY byte[]DATE java.sql.DateTIME java.sql.TimeTIMESTAMP java.sql.TimestampCLOB ClobBLOB BlobARRAY ArrayDISTINCT mapping of underlying typeSTRUCT StructREF RefDATALINK java.net.URLJAVA_OBJECT underlying Java class
![Page 30: Bases de Datos en Java - Intro a JDBC](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54922adbac795949288b46bb/html5/thumbnails/30.jpg)
Tipos de Statement
ExecuteUpdateEjecuta modifi cacionesDevuelve número de elementos afectados
![Page 31: Bases de Datos en Java - Intro a JDBC](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54922adbac795949288b46bb/html5/thumbnails/31.jpg)
Ejemplo Crear tablas
String createString = "create table prueba..."; Statement stmt = null; try { stmt = con.createStatement(); stmt.executeUpdate(createString); } catch (SQLException e) { // TODO! } fi nally { if (stmt != null) { stmt.close(); } }
![Page 32: Bases de Datos en Java - Intro a JDBC](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54922adbac795949288b46bb/html5/thumbnails/32.jpg)
Insertar contenidos
Statement stmt = null; try { stmt = con.createStatement(); stmt.executeUpdate("insert into prueba …"); } catch (SQLException e) { // TODO! } fi nally { if (stmt != null) { stmt.close(); } }
![Page 33: Bases de Datos en Java - Intro a JDBC](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54922adbac795949288b46bb/html5/thumbnails/33.jpg)
Ejercicio
Insertar un actorElegir un país de country
Cambiar todas las ciudades de city que referencien al pais elegido por otroEliminar el país de country
En todas las operaciones mostrar el número de fi las afectadas
![Page 34: Bases de Datos en Java - Intro a JDBC](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54922adbac795949288b46bb/html5/thumbnails/34.jpg)
Tipos de Statement
ExecuteMezcla de los anterioresUtilizado para consultas en tiempo de ejecuciónDevuelve un boolean
GetResultSet()GetUpdateCount()
![Page 35: Bases de Datos en Java - Intro a JDBC](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54922adbac795949288b46bb/html5/thumbnails/35.jpg)
Ejercicio
Preparar una método ejecutarQuerySi hay resultados mostrar los campos y valoresSi hay modifi caciones mostrar su número
Ejecutar el método conUna consulta tipo SELECTUna tipo UPDATE(podéis pedir la consulta por entrada estándar)
![Page 36: Bases de Datos en Java - Intro a JDBC](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54922adbac795949288b46bb/html5/thumbnails/36.jpg)
Prepared Statements
Se utilizan cuando vamos a ejecutar la misma consulta varias vecesQueremos que la base de datos se prepare y optimice la consulta
![Page 37: Bases de Datos en Java - Intro a JDBC](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54922adbac795949288b46bb/html5/thumbnails/37.jpg)
Ejemplo de Prepared Statements
PreparedStatement updateSales = con.prepareStatement("update " + dbName + ".COFFEES " + "set TOTAL = TOTAL + ? where COF_NAME = ?");
![Page 38: Bases de Datos en Java - Intro a JDBC](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54922adbac795949288b46bb/html5/thumbnails/38.jpg)
Lanzando un Prepared Statements
// Fijo los parámetrosupdateSales.setInt(1, 100); updateSales.setString(2, “Franpuchino”);// Lanzo la consultaupdateSales.executeUpdate();
![Page 39: Bases de Datos en Java - Intro a JDBC](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54922adbac795949288b46bb/html5/thumbnails/39.jpg)
Ejercicio
Preparar una consulta (puede ser update)Ejecutarla dos veces con parámetros diferentes
![Page 40: Bases de Datos en Java - Intro a JDBC](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54922adbac795949288b46bb/html5/thumbnails/40.jpg)
Stored Procedures
cs = this.con.prepareCall("{call RAISE_PRICE(?,?,?)}");// Fijamos parámetroscs.setString(1, coffeeNameArg);cs.setFloat(2, maximumPercentageArg);…// Llamamos al procedimientocs.execute();
![Page 41: Bases de Datos en Java - Intro a JDBC](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54922adbac795949288b46bb/html5/thumbnails/41.jpg)
Batch
Realizamos varias sentencias SQL… esperamos al fi nal para procesarlas.Devuelve un array de modifi cados
![Page 42: Bases de Datos en Java - Intro a JDBC](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54922adbac795949288b46bb/html5/thumbnails/42.jpg)
Ejemplo de Batch
this.con.setAutoCommit(false);stmt.addBatch("INSERT INTO COFFEES " + "VALUES('Amaretto', 49, 9.99, 0, 0)");stmt.addBatch("INSERT INTO COFFEES " + "VALUES('Hazelnut', 49, 9.99, 0, 0)");this.con.setAutoCommit(true);int [] updateCounts = stmt.executeBatch();
![Page 43: Bases de Datos en Java - Intro a JDBC](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54922adbac795949288b46bb/html5/thumbnails/43.jpg)
Ampliando funcionalidad del ResultSet
![Page 44: Bases de Datos en Java - Intro a JDBC](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54922adbac795949288b46bb/html5/thumbnails/44.jpg)
Tipos de ResultSet
TYPE_FORWARD_ONLYTYPE_SCROLL_INSENSITIVETYPE_SCROLL_SENSITIVECONCUR_READ_ONLYCONCUR_UPDATABLEHOLD_CURSORS_OVER_COMMITCLOSE_CURSORS_AT_COMMIT
![Page 45: Bases de Datos en Java - Intro a JDBC](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54922adbac795949288b46bb/html5/thumbnails/45.jpg)
Cursores
NextPreviousFirstLastBeforeFirstAfterLastrelative(int rows)absolute(int row)
![Page 46: Bases de Datos en Java - Intro a JDBC](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54922adbac795949288b46bb/html5/thumbnails/46.jpg)
Actualizando ResulSet
UpdateTIPO(columna, valor)UpdateRow()
![Page 47: Bases de Datos en Java - Intro a JDBC](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54922adbac795949288b46bb/html5/thumbnails/47.jpg)
Insertando Rows
uprs.moveToInsertRow();uprs.updateString("COF_NAME", coffeeName);uprs.updateInt("SUP_ID", supplierID);uprs.updateFloat("PRICE", price);uprs.updateInt("SALES", sales);uprs.updateInt("TOTAL", total);uprs.insertRow();uprs.beforeFirst();
![Page 48: Bases de Datos en Java - Intro a JDBC](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54922adbac795949288b46bb/html5/thumbnails/48.jpg)
Ejercicio
Obtener un listado de actoresModifi car uno de ellos
![Page 49: Bases de Datos en Java - Intro a JDBC](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54922adbac795949288b46bb/html5/thumbnails/49.jpg)
Tipos de RowSet
Connected RowSet ObjectsJdbcRowSet
Disconnected RowSet ObjectsCachedRowSetWebRowSetJoinRowSetFilteredRowSet
![Page 50: Bases de Datos en Java - Intro a JDBC](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54922adbac795949288b46bb/html5/thumbnails/50.jpg)
RowSet
PropiedadesJavaBeans notifi cacionesScrollActualización
http://download.oracle.com/javase/6/docs/api/javax/sql/RowSet.html
![Page 51: Bases de Datos en Java - Intro a JDBC](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54922adbac795949288b46bb/html5/thumbnails/51.jpg)
Transacciones
![Page 52: Bases de Datos en Java - Intro a JDBC](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54922adbac795949288b46bb/html5/thumbnails/52.jpg)
Transacciones
con.setAutoCommit(false);con.commit();
con.setAutoCommit(true);
![Page 53: Bases de Datos en Java - Intro a JDBC](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54922adbac795949288b46bb/html5/thumbnails/53.jpg)
SavePoint y RollBack
Savepoint save1 = con.setSavepoint();...con.rollback(save1);…con.commit();
![Page 54: Bases de Datos en Java - Intro a JDBC](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54922adbac795949288b46bb/html5/thumbnails/54.jpg)
Eliminar un Savepoint
Connection.releaseSavepoint
![Page 55: Bases de Datos en Java - Intro a JDBC](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54922adbac795949288b46bb/html5/thumbnails/55.jpg)
Caso práctico
![Page 56: Bases de Datos en Java - Intro a JDBC](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54922adbac795949288b46bb/html5/thumbnails/56.jpg)
Diseño orientativo
![Page 57: Bases de Datos en Java - Intro a JDBC](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54922adbac795949288b46bb/html5/thumbnails/57.jpg)
Ejercicio
Utilizar el código del otro caso como baseProporcionar para las entidades:
ListadoCreación y actualización de registrosEliminar un registro
Listado de las vistasLlamada al procedimiento “tarea_notifi cada”
![Page 58: Bases de Datos en Java - Intro a JDBC](https://reader033.vdocuments.mx/reader033/viewer/2022051514/54922adbac795949288b46bb/html5/thumbnails/58.jpg)
Ejercicio cont.
Crear un Prepared Statement para una de las vistasInsertar múltiples tareas de una vezFijar la fecha de las tareas un día tras otro por personaCambiar la ejecución de una tarea, reasignarla a otra persona y si esa persona ya tiene otra tarea para la misma fecha límite cancelar toda la operación.