Descargar la presentación
La descarga está en progreso. Por favor, espere
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
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.