PDF de programación - Sesión 7: Java Database Connectivity - Lenguaje Java Avanzado

Imágen de pdf Sesión 7: Java Database Connectivity - Lenguaje Java Avanzado

Sesión 7: Java Database Connectivity - Lenguaje Java Avanzadográfica de visualizaciones

Publicado el 22 de Enero del 2019
243 visualizaciones desde el 22 de Enero del 2019
268,8 KB
37 paginas
Creado hace 7a (26/09/2012)
Experto Universitario Java Enterprise

Lenguaje Java Avanzado

Sesión 7: Java Database Connectivity



© 2012-2013 Depto. Ciencia de la Computación e IA



Experto Universitario Java Enterprise

Puntos a tratar

• Introducción
• Drivers de acceso a bases de datos
• Conexión con la base de datos
• Consulta a una base de datos
• Restricciones y movimientos en el ResultSet
• Sentencias de actualización
• Otras llamadas a la BD

Lenguaje Java Avanzado

© 2012-2013 Depto. Ciencia de la Computación e IA

JDBC-2



Experto Universitario Java Enterprise

Introducción

• JDBC es el API de Java para acceder a sistemas de gestión de bases de

datos (SGBD)

• Al hacer uso del API nos va a permitir cambiar de SGBD sin modificar

nuestro código

• JDBC es una especie de “puente” entre nuestro programa Java y el

SGBD

Lenguaje Java Avanzado

© 2012-2013 Depto. Ciencia de la Computación e IA

JDBC-3



Experto Universitario Java Enterprise

Esquema de uso de JDBC

Aplicación

1.Establece una conexión
2. Interrogar y actualizar la BD
3. Procesar los resultados

DB API

Base de
datos

JDBC API

JDBC Driver

Lenguaje Java Avanzado

© 2012-2013 Depto. Ciencia de la Computación e IA

JDBC-4



Experto Universitario Java Enterprise

Drivers de acceso
• Para acceder a una BD necesitamos un driver específico
• Cada BD suele disponer de un API de acceso propietario
• Si usamos ese API, un cambio en la BD provocaría cambios en nuestro

código

• El driver es específico para esa BD, al cambiar la BD sólo tenemos que

cambiar el driver

• El driver traduce la llamada JDBC en la correspondiente llamada al API de

la BD

Lenguaje Java Avanzado

© 2012-2013 Depto. Ciencia de la Computación e IA

JDBC-5



Experto Universitario Java Enterprise

Tipos de drivers



Tipo 1: Puente JDBC-ODBC


Proporciona conectividad entre Java y cualquier base de datos en Microsoft Windows,
mediante ODBC
No se aconseja su uso. Limita las funcionalidades de las BD
Cada cliente debe tener instalado el driver
J2SE incluye por defecto este driver (Windows y Solaris)





Aplicación

Java

API
JDBC

Puente

JDBC-ODBC

API
ODBC

BD

Capa
ODBC

Lenguaje Java Avanzado

© 2012-2013 Depto. Ciencia de la Computación e IA

JDBC-6



Experto Universitario Java Enterprise

Tipos de drivers



Tipo 2: Parte Java, parte driver nativo


El driver actúa como traductor de la llamada Java a una llamada del API de la BD. Necesita
el API de forma local (no usar en Internet)
Es un paso menos que el anterior, pues no tenemos que pasar por el gestor ODBC (más
rápido)
Cada cliente necesita el driver





Aplicación

Java

BD

API
JDBC

Driver
JDBC

API

Específico

Lenguaje Java Avanzado

© 2012-2013 Depto. Ciencia de la Computación e IA

JDBC-7



Experto Universitario Java Enterprise

Tipos de drivers



Tipo 3: Servidor intermediario de acceso a BD



Proporciona una mayor abstracción
Dispondremos de un componente servidor intermedio, que gestiona la conexión con una o
varias BD
Determinados servidores Java EE implementan este driver
Útil para aplicaciones escalables y portables




Aplicación

Java

BD

API
JDBC

Driver
JDBC

Servidor de
Driver JDBC

Driver nativo

Lenguaje Java Avanzado

© 2012-2013 Depto. Ciencia de la Computación e IA

JDBC-8



Experto Universitario Java Enterprise

Tipos de drivers



Tipo 4: Drivers Java


• Mejor rendimiento


El más directo
La llamada JDBC se traduce en una llamada a la propia BD, por la red y sin intermediarios

La mayoría de SGBD disponen de este driver

Aplicación

Java

BD

API
JDBC

Puente
JDBC

Lenguaje Java Avanzado

© 2012-2013 Depto. Ciencia de la Computación e IA

JDBC-9



Experto Universitario Java Enterprise

Sobre los distintos tipos

• Podemos disponer de drivers de distinto tipo para acceder a la misma BD
• Por ejemplo, MySQL desde su propio driver y desde ODBC
• Debemos tener en cuenta que un tipo de driver puede limitar las

funcionalidades de la BD. En este caso, si utilizamos ODBC no tendremos
acceso al control de transacciones de MySQL

• Resumiendo, utilizar siempre el driver del fabricante

Lenguaje Java Avanzado

© 2012-2013 Depto. Ciencia de la Computación e IA

JDBC-10



Experto Universitario Java Enterprise

Instalación de drivers

• Descargamos el driver específico para nuestra BD (normalmente es un .jar)
• Lo añadimos al CLASSPATH

export CLASSPATH=$CLASSPATH:/dir-donde-este/fichero

• Lo cargamos de forma dinámica dentro de nuestro código Java:

• MySQL: Class.forName("com.mysql.jdbc.Driver"); Podéis encontrar también la clase

org.gjt.mm.mysql.Driver

• PostGres: Class.forName("org.postgresql.Driver");
• ODBC: Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

• Se deben capturar las excepciones ClassNotFoundException

Lenguaje Java Avanzado

© 2012-2013 Depto. Ciencia de la Computación e IA

JDBC-11



Experto Universitario Java Enterprise

Conexión a la BD

• Primero debemos conectarnos con la BD

Connection con = DriverManager.getConnection(url);
Connection con = DriverManager.getConnection(url, login, password);

• El url cambiará de una BD a otra, pero todas mantendrán el siguiente

formato:
• jdbc:<subprotocolo>:<nombre>
• jdbc siempre
• subprotocolo es el protocolo a utilizar.
• nombre es la dirección (o el nombre) de la BD

Lenguaje Java Avanzado

© 2012-2013 Depto. Ciencia de la Computación e IA

JDBC-12



Experto Universitario Java Enterprise

Ejemplos de conexiones
• MySQL

Connection con = DriverManager.getConnection(

"jdbc:mysql://localhost/bd", "miguel", "m++24");

• PostGres

Connection con = DriverManager.getConnection(

"jdbc:postgresql://localhost:5432/bd", "miguel", "m++24");

• ODBC

Connection con = DriverManager.getConnection("jdbc:odbc:bd");

Lenguaje Java Avanzado

© 2012-2013 Depto. Ciencia de la Computación e IA

JDBC-13



Experto Universitario Java Enterprise

DriverManager

• Este objeto gestiona todo el paso de información con el driver
• Algunos métodos útiles de esta clase:

DriverManager.setLogWriter(new PrintWriter(System.out,

true)); // Muestra por la salida estándar cualquier operación que se realice
con el driver

DriverManager.println("Esto es un mensaje"); // Nos permite

depurar nuestro código

Lenguaje Java Avanzado

© 2012-2013 Depto. Ciencia de la Computación e IA

JDBC-14



Experto Universitario Java Enterprise

Consulta a una BD

• La conexión a la BD la podemos utilizar para consultar, insertar o borrar

datos

• Todas estas operaciones se realizarán mediante SQL
• La clase Statement nos permitirá realizar estas acciones
• Para crear un objeto de esta clase

Statement stmt = con.createStatement();

Lenguaje Java Avanzado

© 2012-2013 Depto. Ciencia de la Computación e IA

JDBC-15



Experto Universitario Java Enterprise

Consulta (Query)

• Para consultar datos utilizamos el método executeQuery de la clase

Statement
ResultSet result = stmt.executeQuery(query);

• query es un String que contiene la sentencia SQL
• La llamada al método nos devuelve un objeto de la clase ResultSet
• La respuesta es una tabla que contendrá una serie de campos y unos

registros, dependiendo de la consulta realizada

Lenguaje Java Avanzado

© 2012-2013 Depto. Ciencia de la Computación e IA

JDBC-16



Experto Universitario Java Enterprise

Ejemplo de consulta

String query = "SELECT * FROM ALUMNOS WHERE sexo = 'M'";
ResultSet result = stmt.executeQuery(query);


• Imaginemos que la tabla ALUMNOS tiene tres campos, el resultado

almacenado en result es

Registro

exp

nombre

sexo

1286

1287

1288

Amparo

Manuela

Lucrecia

M

M

M

Lenguaje Java Avanzado

© 2012-2013 Depto. Ciencia de la Computación e IA

JDBC-17



Experto Universitario Java Enterprise

Acceso a los valores de ResultSet
• La clase ResultSet dispone de un cursor que nos permite movernos por

los registros

• Cuando ejecutamos la llamada, el cursor está en la posición anterior al

primer registro

• Para mover el cursor a la siguiente posición utilizaremos el método next

de ResultSet

• next devuelve cierto si ha conseguido pasar al siguiente registro y falso

si se encuentra en el último

• Para acceder a los datos del ResultSet, haremos un bucle como este:

while(result.next()) {
// Leer registro
}

Lenguaje Java Avanzado

© 2012-2013 Depto. Ciencia de la Computación e IA

JDBC-18



Experto Universitario Java Enterprise

Obtención del valor de los campos
• El cursor está situado en un campo
• Para obtener los valores de los campos utilizaremos los métodos
getXXXX(campo) donde XXXX es el tipo de datos Java de retorno

• El tipo de datos del campo debe ser convertible al tipo de datos Java

especificado

• El campo se especifica mediante un String o mediante un índice entero,

cuyo valor dependerá de la consulta realizada

Lenguaje Java Avanzado

© 2012-2013 Depto. Ciencia de la Computación e IA

JDBC-19



Experto Universitario Java Enterprise

Tipos de datos

• Los principales métodos que podemos utilizar son:

getInt

Datos enteros

getDouble

Datos reales

getBoolean

Campos booleanos (si/no)

getString

Campos de texto

getDate

getTime

Tipo fecha (devuelve Date)

Tipo fecha (devuelve Time)

Lenguaje Java Avanzado

© 2012-2013 Depto. Ciencia de la Computación e IA

JDBC-20



Experto Universitario Java Enterprise

Ejemplo

int exp;
String nombre;
String sexo;

while(result.next()) {
exp = result.getInt("exp");
nombre = result.getString("nombre");
sexo = result.getString("sexo");
System.out.println(exp + "\t" +

nombre + "\t" + sexo);

}

Lenguaje Java Avanzado

© 2012-2013 Depto. Ciencia de la Computación e IA

JDBC-21



Experto Universitario Java Enterprise

Posible problema
• Un campo entero de la base de datos puede ser nulo, pero un int de Java

no

• Si el campo a consultar no contiene ningún valor, la llamada a get

devuelve 0, si es número, y null si es un objeto

• En el caso de exp, ¿cómo distinguimos un usuario con expediente cer
  • Links de descarga
http://lwp-l.com/pdf14952

Comentarios de: Sesión 7: Java Database Connectivity - Lenguaje Java Avanzado (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios
Es necesario revisar y aceptar las políticas de privacidad