T08 Conexión Java - MySQL
T08 Conexión Java - MySQL
PROGRAMACIÓN
ORIENTADA A OBJETOS II
Ms. Zoraida Yanet VIDAL MELGAREJO
[email protected]
Sesión 08
Arquitectura de una
aplicación
-3-
JVM
Figura 1. Niveles del
esquema de funcionamiento
con bases de datos.
Sistema Operativo
ODBC
-4-
-5-
ODBC
DriverManager
-6-
-7-
• JDBC es una API estándar que implementa la estrategia universal de acceso a datos
de JAVA.
• Es una interfaz que permite a un programa Java ejecutar instrucciones SQL dentro de
Bases de Datos Relacionales, las cuales deben seguir el estándar ANSI SQL-92.
-8-
• JDBC permite escribir aplicaciones Java que gestionan estas tres actividades de
programación:
Conectarse a una fuente de datos, como una base de datos.
Enviar consultas y actualizar declaraciones a la base de datos.
Recuperar y procesar los resultados recibidos de la base de datos en respuesta a la
consulta
-9-
- 10 -
• Los controladores JDBC son adaptadores del lado del cliente (instalados en la
máquina del cliente, no en el servidor) que convierten las solicitudes de los programas
Java en un protocolo que el DBMS puede comprender.
• El código es independiente del gestor que utilizan, por tanto es portable y escalable.
- 11 -
- 12 -
- 13 -
- 14 -
• Native API
El controlador de la API nativa utiliza las bibliotecas del lado del cliente de la base
de datos. Este controlador convierte las llamadas al método JDBC en llamadas
nativas de la API de la base de datos. Para interactuar con diferentes bases de
datos, este controlador necesita su API local, por eso la transferencia de datos es
mucho más segura en comparación con el controlador de tipo 1.
El controlador debe instalarse por separado en las máquinas cliente individuales
La biblioteca cliente del proveedor debe instalarse en la máquina cliente.
El controlador de tipo 2 no está escrito en java, por eso no es un controlador
portátil
Es un controlador dependiente de la base de datos.
- 15 -
• Native API
- 16 -
• Middleware
El controlador de protocolo de red utiliza middleware (servidor de aplicaciones)
que convierte las llamadas JDBC directa o indirectamente en el protocolo de
base de datos específico del proveedor. Aquí, todos los controladores de
conectividad de la base de datos están presentes en un solo servidor, por lo que
no es necesaria una instalación individual del lado del cliente.
Los controladores de tipo 3 están completamente escritos en Java, por lo que son
controladores portátiles.
No se requiere una biblioteca del lado del cliente debido al servidor de
aplicaciones que puede realizar muchas tareas como auditoría, equilibrio de
carga, registro, etc.
Se requiere soporte de red en la máquina cliente.
- 17 -
• Middleware
El mantenimiento del controlador de protocolo de red se vuelve costoso porque
requiere que la codificación específica de la base de datos se realice en el nivel
medio.
Brinda la facilidad para cambiar de una base de datos a otra.
Invoca un servidor intermedio generalmente ubicado en el mismo host de la Base
de Datos. Utiliza un protocolo estándar independiente de la Base de Datos.
- 18 -
• Net Protocol
El controlador de tipo 4 también se denomina controlador de protocolo nativo.
Este controlador interactúa directamente con la base de datos. No requiere
ninguna biblioteca de base de datos nativa, por eso también se conoce como
Thin Driver.
No requiere ninguna biblioteca nativa ni servidor Middleware, por lo que no
requiere instalación del lado del cliente o del lado del servidor.
Está completamente escrito en lenguaje Java, por lo que son controladores
portátiles.
- 19 -
• Net Protocol
- 20 -
- 21 -
• A continuación se muestra una lista de los drivers JDBC de las RDBMS más utilizadas.
- 22 -
Sesión 08
Conexión desde
una aplicación en
Java a una Base de
Datos en MySQL
DriverManager.getConnection(url, Obtener
usuario,contraseña); 2
la Conexión
conn.createStatement();
Crear
conn.prepareStatement(sql); 3
el Comando
conn.prepareCall(sql);
stmt.executeQuery(); Ejecutar
4
stmt.executeUpdate(); el Comando (select)
stmt.close();
Liberar Recursos 5
conn.close();
- 24 -
2. Obtener la Conexión.
• Se obtiene una instancia de tipo java.sql.Connection mediante el DriverManager
3. Crear el Comando.
• Desde una instancia de Connection se pueden crear:
Comandos Estáticos (java.sql.Statement)
Comandos Dinámicos (java.sql.PreparedStatement)
Llamadas a Procedimientos Almacenados (java.sql.CallableStatement)
- 25 -
4. Ejecutar el Comando
• Existen dos modos básicos de ejecución de comando
executeQuery para comandos Select
executeUpdate para comando DDL y DML de actualización
4.1 Procesar los Resultados
Sólo en caso de la ejecución de una consulta de selección, los resultados son
manipulados a través de una instancia de java.sql.ResultSet, el cual brinda
soporte para recorrido sobre registros.
5. Liberar Recursos
• La llamada al método close() de una conexión o de un comando, marca las
instancias para su eliminación de la memoria por el Recolector de basura.
- 26 -
La clase
java.sql.DriverManager
• DriverManager es una clase (no una interface) que viene con la API, con lo cual, un
proveedor de BD no puede optimizar esta clase.
- 27 -
La clase java.sql.DriverManager
• Características
Lleva el control de los gestores JDBC disponibles
Es posible que existan varios dentro del sistema
Por defecto, carga todos los disponibles en jdbc.drivers
El gestor cargado debería registrarse con el método registerDriver
• java.sql.Driver
Gestor de información y configuración general que se carga durante la
inicialización mediante:
o DriverManager.registerDriver
o Class.forName
Se le pedirá información a lo largo del programa, residirá en memoria, dentro sus
métodos más importantes: connect y getPropertyInfo.
- 28 -
Class.forName(“nombre_driver”);
Class.forName("com.mysql.cj.jdbc.Driver");
• El método forName se utiliza para cargar clases por reflexión, de forma indirecta.
- 29 -
2. Obtener la conexión
• java.sql.Connection
Puntero a la base de datos que proporciona el contexto de trabajo para los objetos
Statement y ResultSet. Soporta propiedades de transacción: setAutoCommit, commit
y rollback.
- 30 -
2. Obtener la conexión
• Una base de datos en JDBC es identificada por una URL (Uniform Resource Locator).
Especifica el nombre y la ubicación de la BD. La sintáxis recomendada para la URL
JDBC es la siguiente:
Class.forName("com.mysql.cj.jdbc.Driver");
String url="jdbc:mysql://localhost:3306/eurekabank";
String user="root";
Depende de la configuración de instalación de MySQL
String password="sa";
Connection cn = DriverManager.getConnection(url, user, password);
- 31 -
• java.sql.Statement
Se utiliza el método createStatement de una instancia Connection para su
creación.
- 32 -
• java.sql.PreparedStatement
Se utiliza el método prepareStatement de una instancia Connection para su
creación.
• java.sql.CallableStatement
Se utiliza el método prepareCall de una instancia Connection para su creación.
- 33 -
• java.sql.ResultSet
Los objetos ResultSet permiten recoger los resultados de la ejecución de
sentencias SQL; estos resultados proporcionan un número variable de columnas y
de filas. En definitiva, un ResultSet es un contenedor tabular de tamaño variable.
- 34 -
afterLast()
Todos los métodos señalados devuelven un valor de tipo boolean, que indica si el
movimiento del cursor ha sido posible. Hay que tener en cuenta que, por defecto, los
objetos ResultSet únicamente pueden ser recorridos incrementalmente, y que además
no son actualizables (no se pueden modificar sus atributos).
- 35 -
isAfterLast()
getString(…) getInt(…)
Una vez situado el cursor en la posición deseada, se dispone de una gran cantidad
de métodos para conocer su posición (isXxx), consultar el valor de los atributos
(getXxxx) o modificar los mismos (updateXxxx).
- 36 -
• java.sql.ResultSet
Tanto los métodos update como los métodos get están sobrecargados para
admitir dos tipos de argumentos: el nombre de la columna o la posición de la
columna: de esta manera se dispone, por ejemplo, de un método getInt(String
NombreColumna), y de otro método getInt(int IndiceColumna). Las columnas se
numeran empezando por 1.
Se puede acceder a los datos de las columnas en cualquier orden por índice de
posición o nombre del campo. En el RecordSet de ejemplo, se produce el mismo
resultado con los siguientes métodos: getString(“Nombre”) y getString(2).
- 37 -
5. Liberar Recursos
- 38 -
- 39 -
try {
String url="jdbc:mysql://localhost:3306/eurekabank";
String user="root";
String password=“sa";
cn = DriverManager.getConnection(url, user, password);
} catch(SQLException e) {
JOptionPane.showMessageDialog(null,
"Error no se puede establecer la conexión“ + e.getMessage());
}
- 40 -
- 41 -
- 42 -
- 43 -
try{
String sql = "select * from moneda";
PreparedStatement ps = cn.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
while(rs.next()) {
monecodigo=rs.getString(1);
monedescripcion=rs.getString(2);
System.out.println(monecodigo + “, “ + monedescripcion);
}
} catch(SQLException e) {
JOptionPane.showMessageDialog(null, “Error en SQL “ + e.getMessage());
}
- 45 -
Resumen
• La clase Connection representa una sesión sobre una base de datos y es usada
para crear comandos (Statement).
- 46 -