Bases de Datos en Java - Intro a JDBC

6,831 views

Published on

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

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
6,831
On SlideShare
0
From Embeds
0
Number of Embeds
57
Actions
Shares
0
Downloads
218
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Bases de Datos en Java - Intro a JDBC

  1. 1. Bases de Datos en JAVA Introducción a JDBC Carlos Hernando Carasol chernando@acm.org 10 de Mayo de 2011
  2. 2. Índice de contenidos Motivación del uso de Bases de Datos Introducción a JDBC Conexiones Ejecución de sentencias SQL Secuencias especiales Transacciones
  3. 3. Motivación para usar BBDD
  4. 4. Enterprise Edition Tratamiento de mayor cantidad de datos Optimización para almacenamiento Optimización para recuperación Optimización para manipulación Arquitectura Cliente / Servidor Concentrar la lógica de negocio Data independence
  5. 5. Introducción JDBC
  6. 6. Motivación JDBC Unif car el acceso a las Bases De datos i Similar a ODBC
  7. 7. 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)
  8. 8. Necesidades 1 servidor 1 base de datos 1 usuario 1 conector o driver 1 API
  9. 9. Estableciendo conexión
  10. 10. Cargando el Driver a mano Necesario en versiones antiguas Hay que cargar el driver a mano: Class.forName(“nombre del driver”)
  11. 11. DriverManagerThis fully implemented class connects anapplication to a data source, which isspecif ed by a database URL. When this iclass f rst attempts to establish a iconnection, it automatically loads any JDBC4.0 drivers found within the class path. Notethat your application must manually load anyJDBC drivers prior to version 4.0.
  12. 12. Ejemplo de DriverManagerConnection conn = null;conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/test", “usuario”, “contraseña”);
  13. 13. Definición de origen de datosjdbc:mysql://localhost:3306/test?opcion=1 jdbc: mysql: dialecto localhost: dirección o IP del servidor test: nombre de la base de datos opicion=1: opciones adicionales
  14. 14. DataSourceThis interface is preferred overDriverManager because it allows detailsabout the underlying data source to betransparent to your application. ADataSource objects properties are set sothat it represents a particular data source.
  15. 15. Ejemplo de DataSourcectx = new InitialContext();DataSource ds =(DataSource)ctx.lookup("jdbc/fastCoffeeDB");Connection con = ds.getConnection( "myLogin", "myPassword");
  16. 16. Ejemplo de DriverManagerConnection conn = null;conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/test", “usuario”, “contraseña”);
  17. 17. Ejercicio Establecer conexión con la base de datos Probar los diferentes errores Usuario/contraseña incorrecto Base de datos incorrecto Servidor/puerto incorrecto Sin el driver disponible …
  18. 18. Ejecución de secuencias SQL
  19. 19. Ejecución de secuencias Clase Statement Se obtiene a partir de Connection
  20. 20. Tipos de Statement Para consultas: executeQuery Para modif caciones: executeUpdate i Para ambos: execute Especiales Llamadas a procedimientos almacenados Prepared statement Batch
  21. 21. Tipos de StatementExecuteQuery Ejecuta SQL que devuelve resultados Devuelve un ResulSet
  22. 22. EjemploResultSet rs =stmt.executeQuery(“Consulta”);while (rs.next()) {…}stmt.close();
  23. 23. Ejercicio Conectarse a la base de datos de sakila Seleccionar todos los paises de la tabla country Por cada f la devuelta imprimir por salida i estándar números consecutivos
  24. 24. ResultSet Devuelve todas las f las seleccionadas i Desconoce el número de columnas y contenido hasta la ejecución
  25. 25. 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));}
  26. 26. Ejercicio Mostrar qué tipo de datos hay en la tabla “customer”
  27. 27. Obtener campos Normalmente sabremos los datos que queremos obtener de la base de datos Utilizamos: GetTipo(nombre) GetTipo(posicion) Tipo es en tipo Java.
  28. 28. Ejercicio Mostrar todas las f las con el formato: i ID: valor Atributo1: valor1; Atributo2: valor2... de la tabla “actor”
  29. 29. Tipos de datosCHAR String BINARY byte[]VARCHAR String VARBINARY byte[]LONGVARCHAR String LONGVARBINARY byte[]NUMERIC java.math.BigDecimal DATE java.sql.DateDECIMAL java.math.BigDecimal TIME java.sql.TimeBIT boolean TIMESTAMP java.sql.Timestamp CLOB ClobBOOLEAN boolean BLOB BlobTINYINT byte ARRAY ArraySMALLINT short DISTINCT mapping of underlying typeINTEGER int STRUCT StructBIGINT long REF RefREAL f oat l DATALINK java.net.URLFLOAT double JAVA_OBJECT underlying Java classDOUBLE double
  30. 30. Tipos de StatementExecuteUpdate Ejecuta modif caciones i Devuelve número de elementos afectados
  31. 31. Ejemplo Crear tablasString createString = "create table prueba..."; Statement stmt = null; try { stmt = con.createStatement(); stmt.executeUpdate(createString); } catch (SQLException e) { // TODO! } f nally { i if (stmt != null) { stmt.close(); } }
  32. 32. Insertar contenidosStatement stmt = null; try { stmt = con.createStatement(); stmt.executeUpdate("insert into prueba …"); } catch (SQLException e) { // TODO! } f nally { i if (stmt != null) { stmt.close(); } }
  33. 33. Ejercicio Insertar un actor Elegir un país de country Cambiar todas las ciudades de city que referencien al pais elegido por otro Eliminar el país de country En todas las operaciones mostrar el número de i las afectadas f
  34. 34. Tipos de StatementExecute Mezcla de los anteriores Utilizado para consultas en tiempo de ejecución Devuelve un boolean GetResultSet() GetUpdateCount()
  35. 35. Ejercicio Preparar una método ejecutarQuery Si hay resultados mostrar los campos y valores Si hay modif caciones mostrar su número i Ejecutar el método con Una consulta tipo SELECT Una tipo UPDATE (podéis pedir la consulta por entrada estándar)
  36. 36. Prepared Statements Se utilizan cuando vamos a ejecutar la misma consulta varias veces Queremos que la base de datos se prepare y optimice la consulta
  37. 37. Ejemplo de Prepared StatementsPreparedStatement updateSales =con.prepareStatement("update " + dbName+ ".COFFEES " + "set TOTAL = TOTAL + ?where COF_NAME = ?");
  38. 38. Lanzando un Prepared Statements// Fijo los parámetrosupdateSales.setInt(1, 100);updateSales.setString(2, “Franpuchino”);// Lanzo la consultaupdateSales.executeUpdate();
  39. 39. Ejercicio Preparar una consulta (puede ser update) Ejecutarla dos veces con parámetros diferentes
  40. 40. Stored Procedurescs = this.con.prepareCall("{callRAISE_PRICE(?,?,?)}");// Fijamos parámetroscs.setString(1, coffeeNameArg);cs.setFloat(2, maximumPercentageArg);…// Llamamos al procedimientocs.execute();
  41. 41. Batch Realizamos varias sentencias SQL … esperamos al f nal para procesarlas. i Devuelve un array de modif cados i
  42. 42. Ejemplo de Batchthis.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();
  43. 43. Ampliando funcionalidad del ResultSet
  44. 44. Tipos de ResultSet TYPE_FORWARD_ONLY TYPE_SCROLL_INSENSITIVE TYPE_SCROLL_SENSITIVE CONCUR_READ_ONLY CONCUR_UPDATABLE HOLD_CURSORS_OVER_COMMIT CLOSE_CURSORS_AT_COMMIT
  45. 45. Cursores Next Previous First Last BeforeFirst AfterLast relative(int rows) absolute(int row)
  46. 46. Actualizando ResulSet UpdateTIPO(columna, valor) UpdateRow()
  47. 47. Insertando Rowsuprs.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();
  48. 48. Ejercicio Obtener un listado de actores Modif car uno de ellos i
  49. 49. Tipos de RowSet Connected RowSet Objects JdbcRowSet Disconnected RowSet Objects CachedRowSet WebRowSet JoinRowSet FilteredRowSet
  50. 50. RowSet Propiedades JavaBeans notif caciones i Scroll Actualización http://download.oracle.com/javase/6/docs/api/javax/sql/RowSet.html
  51. 51. Transacciones
  52. 52. Transacciones con.setAutoCommit(false); con.commit(); con.setAutoCommit(true);
  53. 53. SavePoint y RollBackSavepoint save1 = con.setSavepoint();...con.rollback(save1);…con.commit();
  54. 54. Eliminar un SavepointConnection.releaseSavepoint
  55. 55. Caso práctico
  56. 56. Diseño orientativo
  57. 57. Ejercicio Utilizar el código del otro caso como base Proporcionar para las entidades: Listado Creación y actualización de registros Eliminar un registro Listado de las vistas Llamada al procedimiento “tarea_notif cada” i
  58. 58. Ejercicio cont. Crear un Prepared Statement para una de las vistas Insertar múltiples tareas de una vez Fijar la fecha de las tareas un día tras otro por persona Cambiar 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.

×