Bases de Datos en Java - Intro a JDBC

58
Bases de Datos en JAVA Introducción a JDBC Carlos Hernando Carasol [email protected] 10 de Mayo de 2011

description

Curso de introducción al manejo de Bases de Datos en Java con JDBC.

Transcript of Bases de Datos en Java - Intro a JDBC

Page 1: Bases de Datos en Java - Intro a JDBC

Bases de Datos en JAVAIntroducción a JDBC

Carlos Hernando [email protected] de Mayo de 2011

Page 2: Bases de Datos en Java - Intro a JDBC

Í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

Motivación para usar BBDD

Page 4: Bases de Datos en Java - Intro a JDBC

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

Introducción JDBC

Page 6: Bases de Datos en Java - Intro a JDBC

Motivación JDBC

Unifi car el acceso a las Bases De datosSimilar a ODBC

Page 7: Bases de Datos en Java - Intro a JDBC

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

Necesidades

1 servidor1 base de datos1 usuario1 conector o driver1 API

Page 9: Bases de Datos en Java - Intro a JDBC

Estableciendo conexión

Page 10: Bases de Datos en Java - Intro a JDBC

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

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

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

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

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

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

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

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

Ejecución de secuencias SQL

Page 19: Bases de Datos en Java - Intro a JDBC

Ejecución de secuencias

Clase StatementSe obtiene a partir de Connection

Page 20: Bases de Datos en Java - Intro a JDBC

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

Tipos de Statement

ExecuteQueryEjecuta SQL que devuelve resultadosDevuelve un ResulSet

Page 22: Bases de Datos en Java - Intro a JDBC

Ejemplo

ResultSet rs = stmt.executeQuery(“Consulta”);while (rs.next()) {…}stmt.close();

Page 23: Bases de Datos en Java - Intro a JDBC

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

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

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

Ejercicio

Mostrar qué tipo de datos hay en la tabla “customer”

Page 27: Bases de Datos en Java - Intro a JDBC

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

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

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

Tipos de Statement

ExecuteUpdateEjecuta modifi cacionesDevuelve número de elementos afectados

Page 31: Bases de Datos en Java - Intro a JDBC

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

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

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

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

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

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

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

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

Ejercicio

Preparar una consulta (puede ser update)Ejecutarla dos veces con parámetros diferentes

Page 40: Bases de Datos en Java - Intro a JDBC

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

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

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

Ampliando funcionalidad del ResultSet

Page 44: Bases de Datos en Java - Intro a JDBC

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

Cursores

NextPreviousFirstLastBeforeFirstAfterLastrelative(int rows)absolute(int row)

Page 46: Bases de Datos en Java - Intro a JDBC

Actualizando ResulSet

UpdateTIPO(columna, valor)UpdateRow()

Page 47: Bases de Datos en Java - Intro a JDBC

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

Ejercicio

Obtener un listado de actoresModifi car uno de ellos

Page 49: Bases de Datos en Java - Intro a JDBC

Tipos de RowSet

Connected RowSet ObjectsJdbcRowSet

Disconnected RowSet ObjectsCachedRowSetWebRowSetJoinRowSetFilteredRowSet

Page 50: Bases de Datos en Java - Intro a JDBC

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

Transacciones

Page 52: Bases de Datos en Java - Intro a JDBC

Transacciones

con.setAutoCommit(false);con.commit();

con.setAutoCommit(true);

Page 53: Bases de Datos en Java - Intro a JDBC

SavePoint y RollBack

Savepoint save1 = con.setSavepoint();...con.rollback(save1);…con.commit();

Page 54: Bases de Datos en Java - Intro a JDBC

Eliminar un Savepoint

Connection.releaseSavepoint

Page 55: Bases de Datos en Java - Intro a JDBC

Caso práctico

Page 56: Bases de Datos en Java - Intro a JDBC

Diseño orientativo

Page 57: Bases de Datos en Java - Intro a JDBC

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

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.