JDBC: Java Database Connectivity Franco Guidi Polanco Escuela de Ingeniería Industrial Pontificia Universidad Católica de Valparaíso, Chile fguidi@ucv.cl JDBC: Java Database Connectivity v JDBC es un paquete de Java que provee clases e interfaces que interactúan con bases de datos relacionales. v JDBC soporta “queries” (requerimiento a una base de datos) independientes del fabricante del DBMS a través de drivers JDBC. v La mayor parte de los DBMS soportan JDBC (Oracle, Informix, Sybase y otros). Se agradece a Marcelo Silva Flamm el material presentado en estas transparencias Franco Guidi Polanco (PUCV-EII) 25-05-14 2 Esquema de funcionamiento de JDBC Aplicación Java API de JDBC JDBC Driver Manager Driver A Franco Guidi Polanco (PUCV-EII) Driver B Driver C ..... 25-05-14 Drivers JDBC (Nativos, middleware, JDBC-ODBC bridge) 3 Principales clases e interfaces en JDBC v DriverManager: administra los drivers que y permite crear conexiones a bases de datos. v Connection: es un conducto para las comunicaciones con la base de datos. v Statement: es la encapsulación de Java para una sentencia SQL. v ResultSet: almacena los resultados de un query. Franco Guidi Polanco (PUCV-EII) 25-05-14 4 Clase DriverManager v Esta clase carga los drivers JDBC instalados en el computador. v El método getConnection() encuentra el driver apropiado para conectarse a una base de datos específica. Este método retorna un objeto Connection. Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection con = DriverManager.getConnection("jdbc:odbc:aquarium"); Franco Guidi Polanco (PUCV-EII) 25-05-14 5 Interface Connection v Los objetos de este tipo representan una conexión a la base de datos (una sesión entre el programa Java y la base de datos). v A través de esta conexión se envían queries SQL a la base de datos, y se obtienen sus resultados. Franco Guidi Polanco (PUCV-EII) 25-05-14 6 Interface Statement v Los objetos Statement representan sentencias SQL. v Estas sentencias son enviadas a la base de datos (a través de los objetos Connection). v Si con es un objeto Connection, podemos crear un objeto Statement de la siguiente manera: Statement stmt = con.createStatement(); Franco Guidi Polanco (PUCV-EII) 25-05-14 7 Interface ResultSet v Los objetos de este tipo almacenan una tabla de resultados retornada como resultado de la ejecución de una sentencia SQL. ResultSet rs = stmt.executeQuery("Select * FROM articulo "); v En el caso de objetos statement destinados a agregar, actualizar, o eliminar registros, se deben usar los métodos executeInsert(), executeUpdate() y executeDelete(), respectivamente. Franco Guidi Polanco (PUCV-EII) 25-05-14 8 Iterando a través de ResultSet v Si rs es un objeto ResultSet, el siguiente código muestra el primer campo para todos los registros obtenidos (se supone que el primer campo corresponde a un tipo representable como String). while (rs.next( ) ) System.out.println(”Col 1 Value=" + rs.getString(1)); Franco Guidi Polanco (PUCV-EII) 25-05-14 9 import java.io.*; import java.util.*; import java.sql.*; public class TestJdbc { public static void main (String arg[] ) throws Exception { Class.forName("com.mysql.jdbc.Driver"); Connection con=DriverManager.getConnection("jdbc:mysql://localhost/Datos"); String sql= "select * from proveedor;"; Statement st = con.createStatement(); ResultSet rs = st.executeQuery( sql ); while ( rs.next() ) System.out.println( rs.getString( "rut“ ) + " "+ rs.getString( "nombre" )+ " “ ); st.close(); con.close(); } // end main() } // end class Este ejemplo utiliza “MySql” (www.mysql.com) como DBMS y “com.mysql.jdbc.Driver como driver JDBC. Franco Guidi Polanco (PUCV-EII) 25-05-14 10