Está en la página 1de 31

1

JDBC
Es un interfaz orientado a objetos de Java para SQL. Se utiliza para enviar sentencias SQL a un sistema gestor de BD (DBMS). Con JDBC tenemos que continuar escribiendo las sentencias SQL.

Arquitectura JDBC
La filosofa de JDBC es proporcionar transparencia al desarrollador frente al gestor de BD. JDBC utiliza un Gestor de Controladores que hace de interfaz con el controlador especfico de la BD. Aplicacin Java Driver Manager de JDBC Controlador Oracle Controlador JDBC-ODBC Controlador DB2

Oracle

BD SQL Se

BD

BD DB2

Clases de JDBC
<<Interface>> <<Interface>> <<Interface>> <<Interface>>

Driver

Connection

Statement

ResultSet

DriverManager

<<Interface>> PreparedStatement

<<Interface>> ResultSetMetaData

DriverPropertyInfo

<<Interface>> CallableStatement

Cdigo del controlador de la BD


try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); } catch (ClassNotFoundException e) { System.out.println("Error en la carga del driver JDBC"); return; }

Abrir una conexin


Previamente habremos registrado el controlador. DriverManager.getConnection(url). El parmetro imprescindible es la url de la base de datos; para especificar la base de datos que queremos utilizar. Tambin se puede especificar el usuario y la clave con los que nos queremos conectar a la base de datos.
6

Cliente

: DriverManager

: Connection

g e t C o n n e c t i o n ( )

Conexin a la BD

Obtener conexin BD

Cdigo de conexin
try url de la BD { Connection con= DriverManager.getConnection("jdbc:odbc:Biblio", "",""); "",""); } Usuario, clase de la BD catch (SQLException e) { System.out.println(e); }

El objeto Connection
Si no se producen excepciones el mtodo getConnection nos devuelve un objeto que implementa la interfaz Connection. Podemos crear varias conexiones con distintas bases de datos o incluso con la misma. Cada conexin representa una sesin con la BD. El objeto Connection nos permitir acceder a la base de datos para realizar operaciones sobre ella y obtener resultados.
9

Acceso a los datos


Utilizamos la conexin con la base de datos creada anteriormente para enviar comandos y sentencias SQL. El objeto conexin funciona como un enlace directo con el controlador de la BD. Creamos un objeto de la clase Statement que servir de envoltorio para las sentencias SQL. Cuando pasamos la SQL a la conexin este lo enva al controlador que a su vez lo redirecciona a la BD, que nos devolver los resultados.
10

Cliente

: DriverManager

: Connection

: Statement

g e t C o n n e c t i o n ( )
createStatement( )

Obtener el objeto Statement

11

Crear sentencia de BD

Cdigo de creacin de una sentencia de consulta


try { // Creamos el objeto sentencia Statement stmt= con.createStatement();
[...] } catch (Exception e) { System.out.prinln(e); }
12

El objeto Statement
La clase Connection tiene varios mtodos que permiten crear un objeto Statement o una de sus variantes. createStatement, para crear sentencias simples. prepareStatement, para sentencias que pueden contener parmetros, optimiza la utilizacin repetida de estas sentencias.

13

Ejecucin de la sentencia
executeQuery(), ejecucin de consultas, sentencia SELECT. executeUpdate(), actualizaciones de valores en al base de datos. INSERT, UPDATE, DELETE. Slo devuelve la cuenta de las columnas afectadas. execute(), se usa para ejecutar sentencias que no se conocen a priori o que devuelven resultados no homogneos.
14

Cliente

: DriverManager

: Connection

: Statement

: ResultSet

g e t C o n n e c t i o n ( )
createStatement( )

executeQuery( )

Ejecutar la consulta

15

Ejecutar consulta

Cdigo fuente de ejecucin de una sentencia


try { [...]
// Ejecutamos una sentencia SQL ResultSet rs= stmt.executeQuery("SELECT Titulo, ISBN," + " Fecha_edicion, Paginas, Precio" + " FROM LIBROS" + " WHERE Titulo LIKE '%jdbc%'"); } catch (SQLException e) ...
16

Cliente

: DriverManager

: Connection

: Statement

: ResultSet

g e t C o n n e c t i o n ( )
createStatement( )

executeQuery( )

Posicionar el cursor en la siguiente fila

next( ) getInt( ) getString( ) getBigDecimal( )

Repetir mientras haya filas que 17 procesar. Recuperacin valores resultado

Recuperar valores de las columnas.

Recuperacin de datos
Cuando ejecutamos una consulta debemos emplear el mtodo executeQuery(), que devuelve un objeto ResultSet, que nos permitir acceder a los resultados. El ResultSet utiliza el concepto de cursor de base de datos para ir movindose por las filas de datos recuperadas. Las columnas pueden accederse en cualquier orden, utilizando su posicin o su nombre. El objeto ResultSet incluye mtodos getXXX que permiten recuperar valores de distintos tipos. 18

Cdigo de recuperacin de datos


... while (rs.next()) { // Se recupera cada columna por separado String titulo= rs.getString("Titulo"); Date fechaEdicion= rs.getDate("Fecha_edicion"); int pags= rs.getInt("Paginas"); double precio= rs.getDouble("Precio");
// Operacin que realizamos con cada fila System.out.println("Titulo: " + titulo + ", edicin: " + fechaEdicion); }
19

Cliente

: DriverManager

: Connection

: Statement

: ResultSet

g e t C o n n e c t i o n ( )
createStatement( )

executeQuery( )

next( ) getInt( ) getString( ) getBigDecimal( ) close( ) close( )

Liberar el objeto Connection

Liberar el objeto Statement 20 Librerar objetos

Cdigo de liberacin de recursos de BD


try { [...]
// Liberamos objeto sentencia stmt.close(); // Liberamos objeto conexin BD con.close();

} catch (SQLException e) ...


21

Manejo de las excepciones de SQL


SQLException Es la principal forma que tiene JDBC de informar de errores. Hereda de la clase Exception de java.lang. Proporciona la siguiente informacin sobre el error: Una cadena describiendo el error a la que se puede acceder con el mtodo getMessage().

22

Conjunto de resultados desplazable


Recorrido bsico del ResultSet: cursor hacia delante, de fila en fila y desde la primera fila next(). Podemos acceder a las filas del ResultSet de ms formas, como un ndice de un array.

23

Creacin de la sentencia para Resultset desplazable


Cambio en la creacin del objeto sentencia:
createStatement(int tipoResultSet, int concurrenciaResultSet) tipoResultSet es el que permite flexibilidad en el desplazamiento. Valores:
TYPE_FORWARD_ONLY, slo hacia delante TYPE_SCROLL_INSENSITIVE, TYPE_SCROLL_SENSITIVE, mtodos de posicionamiento habilitados
24

Mtodos de desplazamiento del cursor


Mtodos
Movimiento hacia atrs: afterLast(), previous(). Posicionamiento absoluto: first(), last(), absolute(numFila). Posicionamiento relativo: relative(num). Recupera fila actual: getRow().

25

Mtodos para actualizar filas


Posicionarse en la fila para actualizar. Llamar a los mtodos de actualizacin de campos:
updateXXX(<campo>,<valor>)

Para confirmar las actualizaciones sobre la tabla llamamos a: updateRow().

26

Insertando y borrando por programa


Mtodos para insertar filas sin utilizar SQL:
moveToInsertRow(), mueve a fila vaca. updateXXX(<campo>,<valor>) sobre cada campo de la nueva fila. insertRow(), confirma insercin.

Mtodo para borrar filas sin utilizar SQL:


Posicionarnos sobre la fila a borrar. deleteRow().
27

Informacin acerca de la base de datos (Metadatos)


Cuando a priori no tenemos informacin sobre la estructura de la base de datos podemos acceder a ella mediante los metadatos. Esto permite adaptar el acceso que est realizando nuestra aplicacin a una BD concreta en tiempo de ejecucin. Objeto Connection al que aplicamos el mtodo getMetaData(), que devuelve un objeto que implementa la interfaz DatabaseMetaData.
28

Cdigo de recuperacin de metadatos


ResultSet rs = stmt.executeQuery(sqlStr);
ResultSetMetaData rsmd= rs.getMetaData(); int columnCount= rsmd.getColumnCount(); // Vamos imprimiendo los nombres de cada columna for(int x =1;x<=columnCount;x++) { String columnName= rsmd.getColumnName(x); System.out.print(columnName +"\t"); } ...
29

JDBC (Java DataBase Connectivity) es un API de Java que permite al programador ejecutar instrucciones en lenguaje estndar de acceso a Bases de Datos, SQL (Structured Query Language, lenguaje estructurado de consultas), que es un lenguaje de muy alto nivel que permite crear, examinar, manipular y gestionar Bases de Datos relacionales. Para que una aplicacin pueda hacer operaciones en una Base de Datos, ha de tener una conexin con ella, que se establece a travs de un driver, que convierte el lenguaje de alto nivel a sentencias de Base de Datos. Es decir, las tres acciones principales que realizar JDBC son las de establecer la conexin a una base de datos, ya sea remota o no; enviar sentencias SQL a esa base de datos y, en tercer lugar, procesar los resultados obtenidos de la base de datos.
30

Interfaz de Programacin de Aplicaciones, cuyo acrnimo en ingls es API (Application Programming Interface), es un conjunto de funciones residentes en bibliotecas (generalmente dinmicas, tambin llamadas DLLs por sus siglas en ingls, trmino usado para referirse a stas en Windows) que permiten que una aplicacin corra bajo un determinado sistema operativo. En este caso se refiere a las aplicaciones Windows.
31

También podría gustarte