PDF de programación - Acceso a bases de datos con JDBC - Aplicaciones Web/Sistemas Web

Imágen de pdf Acceso a bases de datos con JDBC - Aplicaciones Web/Sistemas Web

Acceso a bases de datos con JDBC - Aplicaciones Web/Sistemas Webgráfica de visualizaciones

Actualizado el 22 de Diciembre del 2019 (Publicado el 7 de Marzo del 2019)
720 visualizaciones desde el 7 de Marzo del 2019
108,6 KB
12 paginas
Creado hace 6a (20/05/2013)
Acceso a bases de datos con JDBC

Aplicaciones Web/Sistemas Web

Juan Pavón Mestras
Dep. Ingeniería del Software e Inteligencia Artificial
Facultad de Informática
Universidad Complutense Madrid

Material bajo licencia Creative Commons, Juan Pavón 2013

JDBC

 Java Database Connectivity

 API Java para conectar las aplicaciones a bases de datos
 Arquitectura modular

• La misma interfaz para distintos tipos de bases de datos
• Implementa un gestor de drivers de bases de datos

Aplicación Java

JDBC API (aplicación)

JDBC

Driver
MySQL

Driver
Oracle

Driver
Sybase

Driver
DB2

JDBC API (controlador)

MySQL

Oracle

Sybase

DB2

Juan Pavón - UCM 2012-13

JDBC

2

Paquete java.sql

 Uso de controladores de las BD

 Clase DriverManager

• Permite establecer y gestionar conexiones a las BD

 Clase SQLPermission

• Proporciona los permisos para poder usar el DriverManager a código

en ejecución dentro de un Security Manager (por ejemplo applets)

 Interfaz Driver

• Metodos para registrar y conectar controladores basados en

tecnología JDBC

 Clase DriverPropertyInfo

• Propiedades de un controlador

 Excepciones

 SQLException
 SQLWarning

Juan Pavón - UCM 2012-13

JDBC

Paquete java.sql

 Interfaz con la aplicación

 Envío de instrucciones SQL a la BD

• Connection

• Métodos para crear instrucciones y para gestionar conexiones y sus

propiedades

• Statement

• Permite enviar instrucciones a la BD

• PreparedStatement

• Permite usar instrucciones preparadas o SQL básicas

• CallableStatement

• Llamada a procedimientos almacenados en la BD

• Savepoint

• Puntos de recuperación en una transacción

 Recuperación de los resultados de la consulta a la BD

• ResultSet

• Conjunto de resultados que se devuelven de una query

• ResultSetMetaData

• Información sobre las columnas del objeto ResultSet

Juan Pavón - UCM 2012-13

JDBC

3

4

Paquete java.sql

 Interfaz con la aplicación

 Correspondencia de tipos SQL con clases e interfaces de Java

• Array  SQL ARRAY
• Blob  SQL BLOB
• Clob  SQL CLOB
• Date  SQL DATE
• NClob  SQL NCLOB
• Ref  SQL REF
• RowId  SQL ROWID
• Struct  SQL STRUCT
• SQLXML  SQL XML
• Time  SQL TIME
• Timestamp  SQL TIMESTAMP
• Clase Types  constantes para tipos SQL

 Correspondencia de tipos SQL definidos por el usuario a Java

• SQLData
• SQLInput
• SQLOutput

Juan Pavón - UCM 2012-13

JDBC

Correspondencia de tipos SQL  Java

boolean
Types.BIT
byte
Types.TINYINT
short
Types.SMALLINT
int
Types.INTEGER
long
Types.BIGINT
double
Types.FLOAT
float
Types.REAL
double
Types.DOUBLE
java.math.BigDecimal
Types.NUMERIC
java.math.BigDecimal
Types.DECIMAL
java.lang.String
Types.CHAR
Types.VARCHAR
java.lang.String
Types.LONGVARCHAR java.lang.String
Types.DATE
Types.TIM
Types.BINARY
Types.VARBINARY

java.sql.Date
java.sql.Time
byte []
byte []

Juan Pavón - UCM 2012-13

JDBC

5

6

Paquete java.sql

 Interfaz con la aplicación

 Para obtener información de la BD (metadatos)

• DatabaseMetaData

• Información sobre la BD

try {

DatabaseMetaData infoBD= conexion.getMetaData();
System.out.println("Base de datos: " + infoBD.getDatabaseProductName());
System.out.println("Version: " + infoBD.getDatabaseProductVersion());

} catch (Exception ex) {
// Tratar el error

}

Juan Pavón - UCM 2012-13

JDBC

Programación con JDBC

 Secuencia normal:

 Establecer la conexión con la BD

• Cargar controladores (si se usa una versión de Java inferior a la 6)
• Establecer la conexión

 Crear un objeto Statement para hacer petición a la BD

• Asociar una sentencia SQL al objeto Statement
• Proporcionar valores de los parámetros
• Ejecutar el objeto Statement

 Procesar los resultados
 Liberar recursos (cerrar la conexión)

 Si es necesario, se pueden ejecutar varias instrucciones dentro

de una transacción (propiedades ACID)
 Abrir transacción

• Crear y ejecutar instrucciones
• Procesar resultados

 Cerrar transacción

Juan Pavón - UCM 2012-13

JDBC

7

8

Establecimiento de conexión con la BD

 Registrar un controlador

 Los DriverManager se encargan de gestionar la conexión y todas las

comunicaciones con la BD

 Necesitan conocer los controladores específicos para las BD que se

vayan a utilizar

 Registro de un controlador para MySQL
 Utilizar el controlador MySQL Connector/J
 Disponible en: http://dev.mysql.com/downloads/connector/j

• Cómo instalarlo:

http://dev.mysql.com/doc/refman/5.7/en/connector-j-installing.html

 El controlador se puede registran con el Class loader de Java
 La clase a cargar viene dada en la documentación del controlador

try {

Class.forName("com.mysql.jdbc.Driver").newInstance();

} catch (Exception ex) {
// Tratar el error

}

Juan Pavón - UCM 2012-13

JDBC

9

Establecimiento de conexión con la BD

 Los controladores se identifican con un URL JDBC de la forma

jdbc:subprotocolo:localizadorBD

• El subprotocolo indica el tipo de base de datos específico
• El localizador permite referenciar de forma única una BD

• Host y opcionalmente puerto
• Nombre de la base de datos

 La conexión a la BD se hace con el método getConnection()

 public static Connection getConnection(String url)
 public static Connection getConnection(String url, String user, String

password)

 public static Connection getConnection(String url, Properties info)

• Todos pueden lanzar la excepción SQLException

try {

conexion = DriverManager.getConnection( 

"jdbc:mysql://localhost/tienda","pruebas", "pruebas");

} catch (SQLException ex) {

// Tratar el error

}

Juan Pavón - UCM 2012-13

JDBC

10

Crear y ejecutar operaciones en la BD

 Statement

 Encapsula las instrucciones SQL a la BD

 Se crea a partir de la conexión

instruccion = conexion.createStatement();

 Métodos

• executeQuery(String sql)

• Ejecución de consultas: SELECT
• Devuelve un objeto ResultSet
• executeUpdate(String sql)

• Modificaciones en la BD: INSERT, UPDATE, DELETE
• Devuelve el número de columnas afectadas

• execute(String sql)

• Ejecución de instrucciones que pueden devolver varios conjuntos de

resultados

• Requiere usar luego getResultSet() o getUpdateCount() para recuperar los

resultados, y getMoreResults() para ver los siguientes resultados

Juan Pavón - UCM 2012-13

JDBC

11

Crear y ejecutar operaciones en la BD

 ResultSet

 Encapsula el conjunto de resultados
 Para obtener el valor de cada campo hay que usar el método

getX("campo") correspondiente al tipo del valor SQL:
• getInt
• getLong
• getFloat
• getDouble
• getBignum
• getBoolean
• getString
• getString
• getDate
• getTime
• getTimesstamp  TIME STAMP
• getObject

 INTEGER
 BIG INT
 REAL
 FLOAT
 DECIMAL
 BIT
 VARCHAR
 CHAR
 DATE
 TIME

 cualquier otro tipo

 Para pasar al siguiente registro se usa el método next()

• Devuelve false cuando no hay más registros

Juan Pavón - UCM 2012-13

JDBC

12

Crear y ejecutar operaciones en la BD

 Ejemplo (se usa la BD tienda del tema de PHP y MySQL)

try {

Statement instruccion = conexion.createStatement();

String query = "SELECT * FROM clientes WHERE nombre LIKE \"Empresa%\"";
ResultSet resultados = instruccion.executeQuery(query);

System.out.println("Listado de clientes: ");
while (resultados.next()) {

System.out.println("Cliente "+resultados.getString("nif")

+", Nombre: "+resultados.getString("nombre")
+", Teléfono: " +resultados.getString("telefono") );

}

} catch (Exception ex) {
e.printStackTrace();

}

Juan Pavón - UCM 2012-13

JDBC

13

Crear y ejecutar operaciones en la BD

 ResultSet

 Por defecto solo se puede recorrer hacia delante
 Se pueden prever otras formas de utilizarlo al crear el objeto

Statement:
createStatement(int resultSetType, int resultSetConcurrency)
• resultSetType:

• TYPE_FORWARD_ONLY: sólo hacia delante con next()
• TYPE_SCROLL_INSENSITIVE: métodos de posicionamiento habilitados
• TYPE_SCROLL_SENSITIVE: métodos de posicionamiento habilitados pero

sensible a las operaciones que se puedan hacer a los datos del ResultSet
• Movimiento hacia atrás: afterLast(), previous()
• Posicionamiento absoluto: first(), last(), absolute(numFila)
• Posicionamiento relativo: relative(num)

 Recupera fila actual: getRow()

• resultSetConcurrency

• ResultSet.CONCUR_READ_ONLY: El objeto ResultSet no se puede modificar
• ResultSet.CONCUR_UPDATABLE: El objeto ResultSet se puede modificar

Juan Pavón - UCM 2012-13

JDBC

14

Crear y ejecutar operaciones en la BD

 ResultSetMetaData

 Permite obtener información sobre un ResultSet: metadatos

try {

Statement instruccion = conexion.createStatement();

String query = "SELECT * FROM clientes";
ResultSet resultados = instruccion.executeQuery(query);

ResultSetMetaData infoResultados = resultados.getMetaData();
int col = infoResultados.getColumnCount();
System.out.println("Estructura de la tabla clientes: ");
for (int i = 1; i <= col; i++) {

System.out.println("Campo " + infoResultados.getColumnLabel(i) + "\t"

+"Tipo: " + infoResultados.getColumnTypeName(i));

}

} catch (Exception ex) {
e.printStackTrace();

}

Juan Pavón - UCM 2012-13

JDBC

15

Crear y ejecutar operaciones en la BD

 Se pueden consultar de forma genérica los resultados sin conocer

su estructura previamente

try {

Statement instruccion = conexion.createStatement();

String query = "SELECT * FROM clientes";
ResultSet resultados = instruccion.executeQuery(query);

ResultSetMetaData infoResultados = resultados.getMetaData();
int col = infoResultados.getColumnCount();
while (resultados.next()) {

for (int i = 1; i <= col; i++) 

System.out.print(resultados.getString(i) + "\t");

System.out.println("");

}

} catch (Exception ex) {
e.printStackTrace();

}

Juan Pavón - UCM 2012-13

JDBC

16

Instrucciones preparadas

 PreparedStatement

 Cuando se van a ejecutar instrucciones repetidamente, se puede

precompilar en la BD y ganar eficiencia

 Primero se define el modelo de instrucción preparada
PreparedStatement ps = 
conexion.prepareStatement("INSERT INTO clientes VALUES (?,?,?,?) ");
  • Links de descarga
http://lwp-l.com/pdf15431

Comentarios de: Acceso a bases de datos con JDBC - Aplicaciones Web/Sistemas Web (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