Publicado el 14 de Enero del 2017
1.252 visualizaciones desde el 14 de Enero del 2017
316,3 KB
13 paginas
Lenguaje de Programación JAVA – 2º IINF y 2º ITIG
Lenguaje JAVA
10. JDBC
287
java.sql
java.sql
10. JDBC – Introducción
JDBC(Java DataBase Connectivity), consiste en un conjunto
de clases e interfaces Java que permiten desarrollar
aplicaciones de acceso a Bases de Datos.
JDBC envía sentencias SQL a una base de datos relacional,
no es necesario reescribir la aplicación para un SGBD
(Sistema Gestor de Bases de Datos) distinto.
JDBC(Java DataBase Connectivity), está basado en X/Open
SQL CLI(Call Level Interface) y ODBC de Microsoft.
David Contreras Bárcena
288
David Contreras Bárcena - ETSI
Lenguaje de Programación JAVA – 2º IINF y 2º ITIG
Lenguaje JAVA
10. JDBC - Introducción
Ventajas de JDBC frente a ODBC
ODBC no es apropiado para un uso directo con Java, porque usa
un interface C.
Una traslación literal del API ODBC en API Java no es deseable
Cuando se usa ODBC, los drivers deben instalarse manualmente
en todos los clientes.
David Contreras Bárcena
289
10. JDBC – Introducción
Pasos a dar para acceder desde una aplicación Java a una
tabla de una Base de Datos:
Paso 1. Cargar el driver adecuado que permita realizar la
conexión: El driver se corresponderá con una clase Java que se
deberá cargar en memoria.
Paso 2. Establecer la conexión con la base de datos: Se deberá
conocer el nombre de la base de datos, ubicación, usuario, etc.
Paso 3. Enviar sentencias SQL a la Base de Datos: Gracias al
lenguaje estándar SQL se generarán sentencias para manipular la
tabla.
Paso 4. Procesar los resultados obtenidos de la sentencia
SQL: Si la sentencia devuelve resultados (p.e. SELECT), se
procesarán a través de un objeto Java.
David Contreras Bárcena
290
David Contreras Bárcena - ETSI
Lenguaje de Programación JAVA – 2º IINF y 2º ITIG
Lenguaje JAVA
10. JDBC – Drivers (Paso 1)
Existen cuatro tipos de drivers:
1. JDBC-ODBC bridge, suministra acceso JDBC mediante drivers
ODBC.
2. Native- API- portly Java, convierte llamadas JDBC en llamadas
al API de los SGBD (Oracle, Sybase, Informix, DB2,etc)
3. JDBC Net pure Java, translada llamadas JDBC en un protocolo
independiente del SGBD.
4. Native Protocol pure Java, convierte llamadas JDBC en un
protocolo de red usado por el SGBD directamente.
Se deben emplear las categorías no puras JAVA cuando no
existan drivers disponibles para el SGBD.
Las dos últimas categorías soportan tecnología JAVA pura.
David Contreras Bárcena
291
10. JDBC – Drivers (Paso 1)
El driver se corresponde con una clase Java que nuestro
programa Java deberá cargar en memoria para poder
dialogar con el SGBD.
El driver de tipo 1 está incuido en la API de JDBC, los de tipo
2, 3 y 4 los deberá suministrar el fabricante.
App JAVA
App JAVA
JDBC
JDBC
Driver
Driver
Nativo
Nativo
BBDD
BBDD
Driver JDBC
Driver JDBC
BRIDGE
BRIDGE
Driver ODBC
Driver ODBC
BBDD SQL’92
BBDD SQL’92
David Contreras Bárcena
292
David Contreras Bárcena - ETSI
Lenguaje de Programación JAVA – 2º IINF y 2º ITIG
Lenguaje JAVA
10. JDBC – Drivers (Paso 1)
Ejemplos de drivers:
Driver JDBC-ODBC: sun.jdbc.odbc.JdbcOdbcDriver (incluido en la API
de JDBC de la plataforma J2SE)
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Driver MySQL: com.mysql.jdbc.Driver (no incluido)
Class.forName ("oracle.jdbc.driver.OracleDriver");
Driver DB2: COM.ibm.db2.jdbc.app.DB2Driver (no incluido)
Class.forName("COM.ibm.db2.jdbc.app.DB2Driver");
Driver Oracle: oracle.jdbc.driver.OracleDriver (no incluido)
Class.forName("com.mysql.jdbc.Driver");
David Contreras Bárcena
293
10. JDBC – Conexión (Paso 2)
Una vez que se dispone del driver que permite dialogar con
el SGBD, se puede establecer la conexión.
La conexión física con la base de datos se representa en
Java a través del interface Connection.
Al utilizar el driver ODBC Bridge hay que establecer una
relación entre la base de datos y el controlador ODBC de la
máquina.
La forma de realizar la conexión física con la base de datos
es a través de la invocación del método getConnection de la
clase DriverManager. Este método devuelve un objeto del
tipo Connection.
Connection con = DriverManager.getConnection (nombreBbdd)
David Contreras Bárcena
294
David Contreras Bárcena - ETSI
Lenguaje de Programación JAVA – 2º IINF y 2º ITIG
Lenguaje JAVA
10. JDBC – Conexión (Paso 2)
Interface Connection:
close() : Se encarga de cerrar la conexión con la BD
commit(): Todos los cambios realizados desde el último commit se
vuelven pemanentes.
rollback() : Desecha todos los cambios realizados desde el último
commit.
createStatement(): Crea un objeto Statement que ejecutará
sentencias SQL.
prepareCall(String): Crea un objeto CallableStatement, para
ejecutar llamada a Stored Procedures.
prepareStatement(String) : Crea un objeto PreparedStatement,
para realizar llamadas a sentencias SQL que contengan
parametros de entrada.
setAutoCommit(boolean): Activa o desactiva el método
autocommit. Después de cada transacción se realiza un commit.
David Contreras Bárcena
295
10. JDBC – Conexión (Paso 2)
Importar las clases del paquete java.sql;
Habilitar el driver de acceso a la base de datos cargándolo en
memoria:
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver")
Especificar el nombre completo de la base de datos:
jdbc:<subprotocolo>:<nombre>
<subprotocolo> es el driver utilizado, p.e. odbc
<nombre> es la referencia a la base de datos
Establecer la conexión:
Connection con = DriverManager.getConnection
(nombre_completo_bbdd)
Realizar las consultas contra la BBDD.
David Contreras Bárcena
296
David Contreras Bárcena - ETSI
Lenguaje de Programación JAVA – 2º IINF y 2º ITIG
Lenguaje JAVA
10. JDBC – Conexión ODBC (Paso 2)
La referencia ODBC a la base de datos se puede realizar de dos
formas:
Referencia física a la base de datos: Se escribe el nombre de la base
de datos, empleando una ruta relativa o absoluta.
"jdbc:odbc:DRIVER=Microsoft Access Driver (*.mdb); DBQ=datos.mdb;
PWD=";
A través de un DSN (Data Source Name) : Es un nombre lógico
asociado a una base de datos con su driver correspondiente. Esto nos
permite crear una independencia entre nuestro programa JAVA y el
tipo de driver a emplear. Es un único de Windows. La relación entre el
controlador ODBC y la base de datos recibe el nombre de DSN. Esta
relación se hace en el Panel de Control, Controladores ODBC.
"jdbc:odbc:clientes";
David Contreras Bárcena
297
10. JDBC – Conexión – Ejemplo (Paso 2)
import java.sql.*;
import java.io.*;
class JDBCConexion
{
try
{
public static void main(String[] args)
{
String bd="jdbc:odbc:Clientes";
//con DSN
//String bd="jdbc:odbc:DRIVER=Microsoft Access Driver (*.mdb);
//DBQ=datos.mdb;”;
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con=DriverManager.getConnection(bd);
con.close();
System.out.println(“Error en la conexión”);
}
catch (SQLException e)
{
}
catch (ClassNotFoundException e)
{
}
System.out.println(“Driver no encontrado”);
}
}
David Contreras Bárcena
298
David Contreras Bárcena - ETSI
Lenguaje de Programación JAVA – 2º IINF y 2º ITIG
Lenguaje JAVA
10. JDBC – Ejecutar sentencias SQL (Paso 3)
Una vez que se ha establecido la conexión a la base de
datos, se emplea el objeto Connection para enviar
sentencias SQL al gestor.
Las sentencias SQL se pueden enviar al gestor de tres
modos diferentes:
Statement, creación de consultas de estructura estática.
PreparedStatement, creación de consultas de estructura dinámica.
CallableStatement, ejecución de procedimientos almacenados en
el gestor.
David Contreras Bárcena
299
10. JDBC – Statement (Paso 3)
Clase que permite ejecutar cualquier tipo de sentencia SQL.
Se utilizará esta clase cuando se conozcan todos los
parámetros de la consulta.
La construcción de la consulta, por lo tanto, es estática.
Métodos:
ResultSet executeQuery(String s): Devuelve un conjunto de
resultados dada un query.
int executeUpdate (String s): Ejecuta una sentencia SQL de
modifiación (INSERT, UPDATE o DELETE) devolviendo el número
de filas afectadas.
Statement stm = con.createStatement();
ResultSet rs = stm.executeQuery("SELECT * FROM personas");
David Contreras Bárcena
300
David Contreras Bárcena - ETSI
Lenguaje de Programación JAVA – 2º IINF y 2º ITIG
Lenguaje JAVA
10. JDBC – Statement (Paso 3)
import java.sql.*;
class Lee
{
public static void main(String args[])
{
Connection con;
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
con=DriverManager.getConnection("jdbc:odbc:tabla“);
Statement stm = con.createStatement();
ResultSet rs = stm.executeQuery(
"SELECT nombre, dni from personas");
.
.
.
David Contreras Bárcena
301
10. JDBC – Statement (Paso 3)
.
.
.
while(rs.next())
{
}
rs.close();
stm.close();
con.close();
String s=rs.getString("nombre");
int i=rs.getInt("dni");
System.out.println("Nombre:" + s + " DNI:" + i);
System.out.println(“Error en acceso a base de datos”);
}
catch (SQLException e)
{
}
catch (ClassNotFoundException e)
{
}
System.out.println(“Driver no encontrado”);
David Contreras Bárcena
302
David Contreras Bárcena - ETSI
}
}
Lenguaje de Programación JAVA – 2º IINF y 2º ITIG
Lenguaje JAVA
10. JDBC – PreparedStatement (Paso 3)
Clase que permite ejecutar cualquier tipo de sentencia SQL.
Se utilizará esta clase cuando no se conozcan alguno de los
parámetros de la consulta.
La sentencia se prepara especificando la estructura y
colocando comodines en aquellos puntos donde irán los
futuros valores.
Una vez que se conozcan dichos valores, se asignarán con
los métodos set correspondientes.
La construcción de la consulta, por lo tanto, es dinámica.
PreparedStatement pstm = con.prepareStatement("SELECT * FROM Personas
WHERE Nombre = ?");
pstm.setString(1, “Manuel”);
ResultSet rs = stm.executeQuery();
David Contreras Bárcena
303
10. JDBC – PreparedStatement (Paso 3)
Métodos:
void setTipoDato(int, tipoDato): Posee tantos métodos como
tipos de datos soporta Java. El primer argumento indica el comodín
a sustituir (comienza en 1),
Comentarios de: Lenguaje de Programación JAVA - 10 JDBC (0)
No hay comentarios