Java DataBase Connectivity JDBC - PowerPoint PPT Presentation

About This Presentation
Title:

Java DataBase Connectivity JDBC

Description:

void commit() - commits transacciones. DataBaseMetaData getMetaData ... void rollback() - rolls back hasta el anterior commit o rollback ... – PowerPoint PPT presentation

Number of Views:112
Avg rating:3.0/5.0
Slides: 36
Provided by: joseph98
Category:

less

Transcript and Presenter's Notes

Title: Java DataBase Connectivity JDBC


1
Java DataBase Connectivity (JDBC)
  • 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.

3
Ejemplo de código JDBC
Connection con DriverManager.getConnection (
jdbcodbcData 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)
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

5
Estructura General JDBC
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

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.

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.

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

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

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

12
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)

13
Interface Driver
  • Específico para cada DBMS
  • acceptsURL(String)
  • connect(String url,Properties info)
  • getPropertyInfo()
  • jdbcCompliant()
  • getMajorVersion
  • getMinorVersion

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")

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 jdbcltsubprotocolgtltsubnamegt
  • subprotocol normalmente el nombre del driver
  • subname puede incluir una conexión de red y un
    nombre de archivo

16
Establecer una conexión
  • Connection con DriverManager.getConnection(url,
    "myLogin", "myPassword")
  • String url "jdbcodbcFred"
  • Connection con DriverManager.getConnection(url,
    "Fernando", "J8")
  • URL jdbcltsubprotocolgtltsubnamegt
  • subname //hostnameport/subsubname

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)

18
Crear una sentencia
  • Statement stmt con.createStatement()
  • con.commit()
  • con.rollback()

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

20
Statement Class Methods
  • void close()
  • ResultSet executeQuery(String sql)
  • int executeUpdate(String sql)
  • void setMaxRows(int max)
  • void setQueryTimeout(int seconds)

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

22
Crear una tabla
import java.net.URL import java.sql. public
class CrearProveedores public static
void main(String args) String
url "jdbcodbcprueba1"
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))"

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())

24
Crear una tabla
try con DriverManager.getConnection(ur
l, "myLogin",
"myPassword") stmt con.createStatement
() stmt.executeUpdate(createString)
stmt.close() con.close()
catch(SQLException ex) System.err.println("S
QLException " ex.getMessage())
25
Insertar tuplas a una tabla
import java.sql. public class
InsertarProveedores public static void
main(String args) String url
"jdbcodbcprueba1" Connection con
Statement stmt String
query "select PROV_NAME, PROV_ID
from PROVEEDORES"
26
Example Populate Table
try Class.forName("sun.jdbc.odbc.JdbcO
dbcDriver") catch(java.lang.ClassNotFoundExce
ption e) System.err.print("ClassNotFoun
dException ") System.err.println(e.getM
essage()) try con
DriverManager.getConnection(url,
"myLogin", "myPassword") stmt
con.createStatement()
27
Example Populate Table
stmt.executeUpdate("insert into PROVEEDORES "
"values(49, 'Superior Coffee', '1 Party Place', "
"'Mendocino', 'CA', '95460')") stmt.executeUp
date("insert into PROVEEDORES " "values(101,
'Acme, Inc.', '99 Market Street', "
"'Groundsville', 'CA', '95199')") stmt.executeUp
date("insert into PROVEEDORES " "values(150,
'The High Ground', '100 Coffee Lane', "
"'Meadows', 'CA', '93966')")
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())
29
ResultSet Interface
  • Preguntas SQL devuelven un cursor
  • SELECT a,b,c FROM Table1 gives

12345 Joe Komar 12.50 33333 Tom
Sturm 350.35 55555 Jennifer Page 756.44
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)
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

32
JDBC Type Java Type CHAR String VARCHAR Str
ing LONGVARCHAR String NUMERIC java.math.BigDec
imal DECIMAL java.math.BigDecimal BIT boolean
TINYINT byte SMALLINT short INTEGER int BIG
INT long REAL float FLOAT double DOUBLE
double BINARY byte VARBINARY byte LONGVAR
BINARY byte DATE java.sql.Date TIME java.
sql.Time TIMESTAMP java.sql.Timestamp
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

34
ResultSetMetaData Interface
int numCols rsmd.getColumnCount() for (int i
1 i lt 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)
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.
Write a Comment
User Comments (0)
About PowerShow.com