La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Java DataBase Connectivity (JDBC)

Presentaciones similares


Presentación del tema: "Java DataBase Connectivity (JDBC)"— Transcripción de la presentación:

1 Java DataBase Connectivity (JDBC)
1/17/2019 Java DataBase Connectivity (JDBC) David Gil Sánchez 1/17/2019 David Gil Sánchez

2 Conceptos Fundamentales JDBC
API (java.sql) Clases y métodos para: establecer una conexión con una BD enviar sentencias SQL a dicha BD procesar los resultados Los desarrolladores de SGBD proporcionan “drivers” JDBC Código no cambia si cambiamos de SGBD, excepto la referencia al driver. 1/17/2019 David Gil Sánchez

3 Ejemplo de código JDBC Connection con = DriverManager.getConnection (
“jdbc:odbc:Data Base Alpha”, “login”, “password”); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery(“SELECT a,b,c FROM Table1”); while (rs.next()){ int x = rs.getInt(“a”); String s = rs.getString(“b”); float f = rs.getFloat(“c”); } 1/17/2019 David Gil Sánchez

4 Standard JDBC Basado en el X/Open SQLCall Level Interface (CLI) para interacciones cliente/servidor Basado en el standard ANSI SQL-92 Adoptado por la mayoría de los vendedores de SGBD Drivers ya escritos para la mayoría de los SGBD más potentes 1/17/2019 David Gil Sánchez

5 Estructura General JDBC
DBMS A DBMSB Java Application JDBC API JDBC Driver Manager JDBC Driver 1/17/2019 David Gil Sánchez

6 ¿Por qué no utilizar ODBC?
ODBC está escrito en C por lo tanto los programas escritos en JAVA deberían hacer llamadas a código en C y esto crea problemas Traducción directa de ODBC a JDBC es difícil Al estar escrito JDBC en JAVA permite su portabilidad 1/17/2019 David Gil Sánchez

7 Tipos de drivers TIPO 1: Puente JDBC-ODBC. El puente se encarga de traducir las llamadas que se hacen a llamadas ODBC y de pasarlas al driver ODBC apropiado. TIPO 2: Native-API. Convierte las llamadas JDBC a llamadas del API del cliente del SGBD. Requiere código binario en el cliente. 1/17/2019 David Gil Sánchez

8 Tipos de drivers TIPO 3: Network-Protocol. Traduce las funciones JDBC a un protocolo de comunicaciones independiente del SGBD, el cual traduce dichas funciones al API del SGBD específico. TIPO 4: Native-Protocol. Traducen directamente las llamadas JDBC al protocolo de red que usa la BD. 1/17/2019 David Gil Sánchez

9 JDBC-ODBC Bridge Puente que permite unir código Java con drivers ODBC de MsWindows Necesidad de registrar la BD con ODBC antes de utilizarla ODBC utiliza sentencias SQL para manipulación y consulta 1/17/2019 David Gil Sánchez

10 Clases JDBC java.sql.DriverManager permite la carga de drivers y establecer una conexión java.sql.Connection representa una conexión con una BD determinada java.sql.Statement actua como un contenedor para una sentencia SQL a ejecutar sobre una conexión java.sql.ResultSet representa el cursor con el resultado 1/17/2019 David Gil Sánchez

11 Clases JDBC El interface java.sql.Statement tiene dos sub-tipos importantes: java.sql.PreparedStatement para ejecutar sentencias SQL precompiladas java.sql.CallableStatement para ejecutar procedimientos almacenados 1/17/2019 David Gil Sánchez

12 Clase DriverManager Capa de gestión de JDBC
1/17/2019 Clase DriverManager Capa de gestión de JDBC permite cargar drivers automáticamente (propiedad del sistema "jdbc.drivers") Permite establecer una conexión entre un driver y una BD Monitoriza una conexión para en aspectos como timers, mensajes de log, trazas, etc. Todos sus métodos son (el constructor es private) 1/17/2019 David Gil Sánchez

13 Interface Driver Específico para cada DBMS acceptsURL(String)
connect(String url,Properties info) getPropertyInfo() jdbcCompliant() getMajorVersion getMinorVersion 1/17/2019 David Gil Sánchez

14 Cargar los Drivers Se cargan los drivers que se encuentran especificados en la propiedad “jdbc.drivers”) Explícitamente: Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 1/17/2019 David Gil Sánchez

15 Connection Interface Establece una conexión entre el programa y la BD
Se establece invocando al método estático getConnection(url) de la clase DriverManager url String jdbc:<subprotocol>:<subname> subprotocol normalmente el nombre del driver subname puede incluir una conexión de red y un nombre de archivo 1/17/2019 David Gil Sánchez

16 Establecer una conexión
Connection con = DriverManager.getConnection(url, "myLogin", "myPassword"); String url = "jdbc:odbc:Fred"; Connection con = DriverManager.getConnection(url, "Fernando", "J8"); URL jdbc:<subprotocol>:<subname> subname //hostname:port/subsubname 1/17/2019 David Gil Sánchez

17 Connection Interface Usado para crear un nuevo objeto Statement
con.createStatement() Otros métodos de interés: void close() - libera recursos void commit() - commits transacciones DataBaseMetaData getMetaData() CallableStatement prepareCall(String sql) void rollback() - rolls back hasta el anterior commit o rollback void setAutoCommit(boolean enable) 1/17/2019 David Gil Sánchez

18 Crear una sentencia Statement stmt = con.createStatement();
con.commit(); con.rollback(); 1/17/2019 David Gil Sánchez

19 Statement Class Representa un objecto creado con createStatement() de la clase Connection Usada para enviar una sentencia SQL simple sin parametros PreparedStatement ejecuta sentencias SQL precompiladas CallableStatement ejecuta procedimientos almacenados 1/17/2019 David Gil Sánchez

20 Statement Class Methods
void close() ResultSet executeQuery(String sql) int executeUpdate(String sql) void setMaxRows(int max) void setQueryTimeout(int seconds) 1/17/2019 David Gil Sánchez

21 Crear un ODBC Click en Start, Settings, Control Panel
Click en 32 bit ODBC Click en Add y elegir un driver como Microsoft Access Escribir un nombre para la fuente de datos (se usará en el programa Java) y la descripción Click en Select para seleccionar una BD existente o bien crear una nueva 1/17/2019 David Gil Sánchez

22 Crear una tabla import java.net.URL; import java.sql.*;
public class CrearProveedores { public static void main(String args[]) { String url = "jdbc:odbc:prueba1"; Connection con; String createString; Statement stmt; createString = "create table PROVEEDORES " + "(PROV_ID int, " + ”`PROV_NAME varchar(40), " + "STREET varchar(40), " + "CITY varchar(20), " + "STATE char(2), CP char(5))"; 1/17/2019 David Gil Sánchez

23 Crear una tabla //CARGAR EL DRIVER try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); } catch(java.lang.ClassNotFoundException e) { System.err.print("ClassNotFoundException: "); System.err.println(e.getMessage()); } 1/17/2019 David Gil Sánchez

24 Crear una tabla try { con = DriverManager.getConnection(url,
"myLogin", "myPassword"); stmt = con.createStatement(); stmt.executeUpdate(createString); stmt.close(); con.close(); } catch(SQLException ex) { System.err.println("SQLException: " + ex.getMessage()); } 1/17/2019 David Gil Sánchez

25 Insertar tuplas a una tabla
import java.sql.*; public class InsertarProveedores { public static void main(String args[]) { String url = "jdbc:odbc:prueba1"; Connection con; Statement stmt; String query = "select PROV_NAME, PROV_ID from PROVEEDORES"; 1/17/2019 David Gil Sánchez

26 Example Populate Table
try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); } catch(java.lang.ClassNotFoundException e) { System.err.print("ClassNotFoundException: "); System.err.println(e.getMessage()); } con = DriverManager.getConnection(url, "myLogin", "myPassword"); stmt = con.createStatement(); 1/17/2019 David Gil Sánchez

27 Example Populate Table
stmt.executeUpdate("insert into PROVEEDORES " + "values(49, 'Superior Coffee', '1 Party Place', " + "'Mendocino', 'CA', '95460')"); "values(101, 'Acme, Inc.', '99 Market Street', " + "'Groundsville', 'CA', '95199')"); "values(150, 'The High Ground', '100 Coffee Lane', " "'Meadows', 'CA', '93966')"); 1/17/2019 David Gil Sánchez

28 Ejemplo consultar una tabla
ResultSet rs = stmt.executeQuery(query); System.out.println(”Proveedores y sus ID:"); while (rs.next()) { String s = rs.getString(”PROV_NAME"); int n = rs.getInt(”PROV_ID"); System.out.println(s + " " + n); } stmt.close(); con.close(); } catch(SQLException ex) { System.err.println("SQLException: " + ex.getMessage()); 1/17/2019 David Gil Sánchez

29 ResultSet Interface Preguntas SQL devuelven un cursor
“SELECT a,b,c FROM Table1” gives: Joe Komar Tom Sturm Jennifer Page 1/17/2019 David Gil Sánchez

30 ResultSet Sample Code ResultSet rs = stmt.executeQuery(“SELECT a,b,c FROM Table1”); while rs.next(){ int i = rs.getInt(“a”); String s = rs.getString(2); //se puede usar numero columna float f = rs.getFloat(“c”); System.out.println(i + “ “ + s + “ “ + f); } 1/17/2019 David Gil Sánchez

31 ResultSet Interface Métodos “get” para cada tipo de datos primitivo, y alguno más Se puede usar Object getObject(int col or String name) para obtener un tipo desconocido Object devuelto será un tipo correspondiente a los tipos de datos Java, según tabla de conversiones 1/17/2019 David Gil Sánchez

32 JDBC Type Java Type CHAR String VARCHAR String LONGVARCHAR String
NUMERIC java.math.BigDecimal DECIMAL java.math.BigDecimal BIT boolean TINYINT byte SMALLINT short INTEGER int BIGINT long REAL float FLOAT double DOUBLE double BINARY byte[] VARBINARY byte[] LONGVARBINARY byte[] DATE java.sql.Date TIME java.sql.Time TIMESTAMP java.sql.Timestamp 1/17/2019 David Gil Sánchez

33 ResultSetMetaData Interface
Objecto creado a partir de un objeto ResultSet: ResultSet rs = stmt.executeQuery(…); ResultSetMetaData rsmd = rs.getMetaData(); Se usa para obtener información sobre los resultados obtenidos 1/17/2019 David Gil Sánchez

34 ResultSetMetaData Interface
int numCols = rsmd.getColumnCount(); for (int i = 1; i <= numCols; i++){ int jdbcType = rsmdgetColumnType(i); String name = rsmd.getColumnTypeName(i); System.out.println(“Column “ + i + “is JDBC type “ + jdbcType + “, which is JDBC type “ + name); } 1/17/2019 David Gil Sánchez

35 ResultSetMetaData Interface
String getColumnLabel(int col) -- heading String getColumnName(int col) -- name int getScale(int col) -- decimal places String getTableName(int col) -- table name boolean isCurrency(int col) -- cash value boolean isReadOnly(int col) -- read only etc. 1/17/2019 David Gil Sánchez


Descargar ppt "Java DataBase Connectivity (JDBC)"

Presentaciones similares


Anuncios Google