JDBC: Java Database Connectivity JDBC es un paquete de Java que provee clases e interfaces que interactúan con bases de datos relacionales. JDBC soporta “queries” (requerimiento a una base de datos) independientes del fabricante del DBMS a través de drivers JDBC. La mayor parte de los DBMS soportan JDBC (Oracle, Informix, Sybase y otros). JDBC: Java Database Connectivity Franco Guidi Polanco Escuela de Ingeniería Industrial Pontificia Universidad Católica de Valparaíso, Chile fguidi@ucv.cl Se agradece a Marcelo Silva Flamm el material presentado en estas transparencias Franco Guidi Polanco (PUCV-EII) Esquema de funcionamiento de JDBC DriverManager: administra los drivers que y permite crear conexiones a bases de datos. Connection: es un conducto para las comunicaciones con la base de datos. Statement: es la encapsulación de Java para una sentencia SQL. ResultSet: almacena los resultados de un query. API de JDBC JDBC Driver Manager Driver B 2 Principales clases e interfaces en JDBC Aplicación Java Driver A 3/9/2007 Drivers JDBC Driver C ..... (Nativos, middleware, JDBC-ODBC bridge) Franco Guidi Polanco (PUCV-EII) 3/9/2007 3 Franco Guidi Polanco (PUCV-EII) 3/9/2007 4 Clase DriverManager Interface Connection Esta clase carga los drivers JDBC instalados en el computador. El método getConnection() encuentra el driver apropiado para conectarse a una base de datos específica. Este método retorna un objeto Connection. 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). A través de esta conexión se envían queries SQL a la base de datos, y se obtienen sus resultados. Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection con = DriverManager.getConnection("jdbc:odbc:aquarium"); Franco Guidi Polanco (PUCV-EII) 3/9/2007 5 Interface Statement Statement stmt = con.createStatement(); 3/9/2007 3/9/2007 6 Interface ResultSet Los objetos Statement representan sentencias SQL. Estas sentencias son enviadas a la base de datos (a través de los objetos Connection). Si con es un objeto Connection, podemos crear un objeto Statement de la siguiente manera: Franco Guidi Polanco (PUCV-EII) Franco Guidi Polanco (PUCV-EII) 7 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 "); 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) 3/9/2007 8 Iterando a través de ResultSet import java.io.*; import java.util.*; import java.sql.*; 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). 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 while (rs.next( ) ) System.out.println(”Col 1 Value=" + rs.getString(1)); Este ejemplo utiliza “MySql” (www.mysql.com) como DBMS y “com.mysql.jdbc.Driver como driver JDBC. Franco Guidi Polanco (PUCV-EII) 3/9/2007 9 Franco Guidi Polanco (PUCV-EII) 3/9/2007 10