Your SlideShare is downloading. ×
  • Like
T17 - Gestion de BBDD
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

T17 - Gestion de BBDD

  • 244 views
Published

Gestión de bases de datos con Java. JDBC

Gestión de bases de datos con Java. JDBC

Published in Education
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
244
On SlideShare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
6
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Tema – 17Gestión de bases de datos
  • 2. 17.1. Introducción• Es habitual que los datos que va a utilizar nuestro programa estén almacenados en una base de datos, en lugar de en ficheros de texto.• En este capítulo veremos las herramientas que nos proporciona Java para que nuestros programas accedan a la información contenida en una base de datos.PROGRAMACIÓN – Daniel Santiago 2
  • 3. 17.1. Introducción• Para que nuestros programas puedan realizar operaciones con los datos almacenados en una base de datos, tenemos dos interfaces de aplicaciones (APIs): – Open Database Connectivity (ODBC), utilizada por Microsoft (también se puede usar con Java). – Java Database Connectivity (JDBC), desarrollada por Oracle para programas escritos en Java.• Ambas APIs nos dan las herramientas para conectar con una base de datos y recuperar y manipular la información que contiene.PROGRAMACIÓN – Daniel Santiago 3
  • 4. 17.2. Registro del driver JDBC• Para poder establecer conexión con una base de datos en primer lugar vamos a necesitar descargarnos el driver JDBC para la BDD con la que vamos a trabajar.• En este tutorial se va a usar MySQL. Podemos descargar el conector de la url: – http://www.mysql.com/downloads/connector/j/• Para incluir el driver en un proyecto de eclipse realizamos las mismas operaciones que en el siguiente tutorial: – http://danisantiago.com/instalacion-jdbc-sqlserver-2008- en-eclipse/PROGRAMACIÓN – Daniel Santiago 4
  • 5. 17.2. Registro del driver JDBC• El registro del driver en nuestro programa consiste en cargar la clase que corresponde a dicho driver en la máquina virtual de Java. Usamos la clase Class con ese fin: try{ Class.forName(“com.mysql.jdbc.Driver”); } catch(Exception e){ System.out.println(“Error al cargar el driver”); }• El String “com.mysql.jdbc.Driver” se obtiene observando la ruta en la que se encuentra la clase Driver del driver que acabamos de añadir al proyecto:PROGRAMACIÓN – Daniel Santiago 5
  • 6. 17.3. Conexión a la BDD• Una vez hemos registrado el driver JDBC en nuestro programa, lo siguiente es hacer la conexión con la base de datos. Para ello usamos el método “getConnection” de la clase DriverManager. Este método nos devuelve un objeto de la interfaz Connection. import java.sql.Connection; import java.sql.DriverManager; … Connection con = DriverManager.getConnection(“jdbc:mysql://localhost/prueba”, “root”, “12345”);PROGRAMACIÓN – Daniel Santiago 6
  • 7. 17.3. Conexión a la BDD• En el código anterior el método “getConnection” recibe tres parámetros de tipo String que indican: – URL de la base de datos a la que se quiere conectar (servidor localhost, bdd prueba). – Usuario con el que se conecta. – Password del usuario.• También se puede usar el método “getConnection” de las siguientes formas: – getConnection(String url); – getConnection(String url, Properties info);PROGRAMACIÓN – Daniel Santiago 7
  • 8. 17.3. Conexión a la BDD• getConnection(String url): con = DriverManager.getConnection (“jdbc:mysql://localhost/prueba?user=root&password=12345”);• getConnection(String url, Properties info): import java.util.Properties; … Properties prop = new Properties(); prop.put(“user”, “root”); prop.put(“password”, “12345”); con = DriverManager.getConnection(“jdbc:mysql://localhost/prueba”, prop);PROGRAMACIÓN – Daniel Santiago 8
  • 9. 17.3. Consultas a la BDD• Una vez conectados a la base de datos podremos acceder a los datos ejecutando sentencias SQL.• El objeto “Connection” tiene un método “createStatement()” que conecta con el driver que gestiona la BDD. El método devuelve un objeto “Statement”, con el que podremos ejecutar las sentencias SQL.PROGRAMACIÓN – Daniel Santiago 9
  • 10. 17.3. Consultas a la BDD import java.sql.Statement; … Connection con = DriverManager.getConnection(url, user, password); Statement stmt = con.createStatement();• Para ejecutar un SELECT sobre la BDD usaremos el método “executeQuery(String)” de la clase “Statement”.• Todas los datos resultantes de la ejecución del SELECT se almacenan en un “ResultSet”.PROGRAMACIÓN – Daniel Santiago 10
  • 11. 17.3. Consultas a la BDD import java.sql.ResultSet; … Statement stmt = con.createStatement(); ResultSet rs = stmt.ExecuteQuery(“SELECT * FROM usuario”);• El ResultSet contiene varias filas con el resultado de la consulta. Para movernos entre ellas usaremos un cursor, que inicialmente se sitúa delante de la primera fila.PROGRAMACIÓN – Daniel Santiago 11
  • 12. 17.3. Consultas a la BDD• Algunos métodos del ResultSet son: – boolean next(): desplaza el cursor a la siguiente fila. Devuelve true si hay fila, false si no. – boolean first(): sitúa el cursor en la primera fila. Devuelve true si hay al menos una fila. – void beforeFirst(): sitúa el cursor delante de la primera fila. – boolean previous(): sitúa el cursor en la fila anterior, si hay. Si no devuelve false. – void afterLast(): sitúa el cursor detrás de la última fila. – boolean absolute(int i): sitúa el cursor en la fila i. Devuelve true si hay una fila en esa posición. Las filas empiezan a numerarse a partir de 1. – boolean relative(int i): desplaza el cursor i posiciones desde donde se encuentra actualmente. Devuelve true si hay una fila en esa posición. – boolean last(): sitúa el cursor en la última fila. Devuelve true si hay al menos una fila.PROGRAMACIÓN – Daniel Santiago 12
  • 13. 17.3. Consultas a la BDD• Para acceder a los datos de cada fila de un ResultSet usamos los métodos “gets” (getInt, getBoolean…). A cada dato se puede acceder usando su posición (empezando por 1) en la fila o su nombre. ResultSet rs = stmt.executeQuery(“SELECT * FROM usuario”); while(rs.next()){ System.out.println(rs.getInt(“id”)); /*Accedo por el nombre del dato*/ System.out.println(rs.getString(2)); /*Accedo por la posición del dato en la fila*/ System.out.println(rs.getString(3)); } rs.close(); //Cierro el ResultSet ya usadoPROGRAMACIÓN – Daniel Santiago 13
  • 14. 17.4. Manipulación de la información• Podemos acceder a la información de nuestra BDD para modificarla de dos formas: – Usando los métodos de la clase “Statement”. – A través del objeto “ResultSet”.• Las operaciones que podremos hacer son las típicas del lenguaje DML de SQL (INSERT, UPDATE, DELETE).• A continuación se verá el código correspondiente a cada una de las opciones que tenemos.PROGRAMACIÓN – Daniel Santiago 14
  • 15. 17.5. Inserción de registros conStatement• Para poder ejecutar la sentencia INSERT con el objeto “Statement” usamos el método “executeUpdate”: Connection con = DriverManager.getConnection(url, user, password); Statement stmt = con.createStatement(); stmt.executeUpdate(“INSERT INTO usuario VALUES(46, ‘Elena’, ‘1234567890’)”);PROGRAMACIÓN – Daniel Santiago 15
  • 16. 17.6. Inserción de registros conResultSet• Para hacer INSERT con el objeto ResultSet usamos el método “insertRow”: Connection con = DriverManager.getConnection(url, user, password); Statement stmt = con.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE); ResultSet rs = stmt.executeQuery(“SELECT * FROM usuario”); rs.moveToInsertRow(); rs.updateInt(“id”, 47); rs.updateString(“nombre”, “Dani”); rs.updateString(“contrasenya”, “miPass”); rs.insertRow();PROGRAMACIÓN – Daniel Santiago 16
  • 17. 17.6. Inserción de registros conResultSet• Obsérvese cómo se ha creado el objeto de la clase “Statement”, pasándole dos parámetros: Statement stmt = con.createStatement(ResultSet.TYPE_FORWARD_ONLY , ResultSet.CONCUR_UPDATABLE); – TYPE_FORWARD_ONLY: a la hora de acceder a los datos de un ResultSet sólo se podrán recorrer sus filas secuencialmente empezando por la primera. – CONCUR_UPDATABLE: los datos del ResultSet se pueden modificar. Los cambios afectarán también a la base de datos.PROGRAMACIÓN – Daniel Santiago 17
  • 18. 17.7. Actualización de registros conStatement• Ejecutamos la sentencia UPDATE con el método “executeUpdate” del objeto “Statement”: Connection con = DriverManager.getConnection(url, user, password); Statement stmt = con.createStatement(); stmt.executeUpdate(“UPDATE usuario SET nombre = ‘Helena’ WHERE id = 46”);PROGRAMACIÓN – Daniel Santiago 18
  • 19. 17.8. Actualización de registros conResultSet• Para hacer UPDATE con el objeto ResultSet usamos el método “updateRow”: Connection con = DriverManager.getConnection(url, user, password); Statement stmt = con.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE); ResultSet rs = stmt.executeQuery(“SELECT * FROM usuario”); boolean encontrado = false; while(rs.next() && !encontrado){ if(rs.getInt(“id”) == 46){ rs.updateString(“nombre”, “Helena”); rs.updateRow(); encontrado = true; } }PROGRAMACIÓN – Daniel Santiago 19
  • 20. 17.9. Borrado de registros conStatement• Ejecutamos la sentencia DELETE con el método “executeUpdate” del objeto “Statement”: Connection con = DriverManager.getConnection(url, user, password); Statement stmt = con.createStatement(); stmt.executeUpdate(“DELETE FROM usuario WHERE id = 46”);PROGRAMACIÓN – Daniel Santiago 20
  • 21. 17.10. Borrado de registros conResultSet• Para hacer DELETE con el objeto ResultSet usamos el método “deleteRow”: Connection con = DriverManager.getConnection(url, user, password); Statement stmt = con.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE); ResultSet rs = stmt.executeQuery(“SELECT * FROM usuario”); boolean encontrado = false; while(rs.next() && !encontrado){ if(rs.getInt(“id”) == 46){ rs.deleteRow(); encontrado = true; } }PROGRAMACIÓN – Daniel Santiago 21
  • 22. 17.11. Cerrar conexión• Es importante tener en cuenta que debemos liberar los recursos de la BDD cuando ya no los usemos, es decir, cerrar la conexión.• Al terminar nuestro trabajo con la base de datos cerraremos los siguientes recursos: – Cerramos el ResultSet: rs.close(); – Cerramos Statement: stmt.close(); – Cerramos Connection: con.close();PROGRAMACIÓN – Daniel Santiago 22