Publicado el 22 de Enero del 2019
569 visualizaciones desde el 22 de Enero del 2019
268,8 KB
37 paginas
Creado hace 11a (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
Comentarios de: Sesión 7: Java Database Connectivity - Lenguaje Java Avanzado (0)
No hay comentarios