T08 Conexión Java - MySQL
T08 Conexión Java - MySQL
PROGRAMACIÓN
ORIENTADA A OBJETOS II
Ms. Zoraida Yanet VIDAL MELGAREJO
zvidal@[Link]
Sesión 08
2
Docente: Ms. Zoraida Yanet Vidal Melgarejo Tema: Conexión Java – MySQL
Página - 1 -
Universidad Facultad de Ingeniería
Nacional Programa de Estudios: Ingeniería de Sistemas
de Trujillo Experiencia Curricular: Programación Orientada a Objetos II
Arquitectura de una
aplicación
-3-
JVM
Figura 1. Niveles del
esquema de funcionamiento
con bases de datos.
Sistema Operativo
ODBC
-4-
4
Docente: Ms. Zoraida Yanet Vidal Melgarejo Tema: Conexión Java – MySQL
Página - 2 -
Universidad Facultad de Ingeniería
Nacional Programa de Estudios: Ingeniería de Sistemas
de Trujillo Experiencia Curricular: Programación Orientada a Objetos II
-5-
ODBC
DriverManager
-6-
6
Docente: Ms. Zoraida Yanet Vidal Melgarejo Tema: Conexión Java – MySQL
Página - 3 -
Universidad Facultad de Ingeniería
Nacional Programa de Estudios: Ingeniería de Sistemas
de Trujillo Experiencia Curricular: Programación Orientada a Objetos II
-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-
8
Docente: Ms. Zoraida Yanet Vidal Melgarejo Tema: Conexión Java – MySQL
Página - 4 -
Universidad Facultad de Ingeniería
Nacional Programa de Estudios: Ingeniería de Sistemas
de Trujillo Experiencia Curricular: Programación Orientada a Objetos II
• 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 -
10
Docente: Ms. Zoraida Yanet Vidal Melgarejo Tema: Conexión Java – MySQL
Página - 5 -
Universidad Facultad de Ingeniería
Nacional Programa de Estudios: Ingeniería de Sistemas
de Trujillo Experiencia Curricular: Programación Orientada a Objetos II
• 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 -
11
- 12 -
12
Docente: Ms. Zoraida Yanet Vidal Melgarejo Tema: Conexión Java – MySQL
Página - 6 -
Universidad Facultad de Ingeniería
Nacional Programa de Estudios: Ingeniería de Sistemas
de Trujillo Experiencia Curricular: Programación Orientada a Objetos II
- 13 -
13
- 14 -
14
Docente: Ms. Zoraida Yanet Vidal Melgarejo Tema: Conexión Java – MySQL
Página - 7 -
Universidad Facultad de Ingeniería
Nacional Programa de Estudios: Ingeniería de Sistemas
de Trujillo Experiencia Curricular: Programación Orientada a Objetos II
- 15 -
15
• Native API
✓ Los controladores de tipo 2 utilizan una API nativa para comunicarse con un
sistema de base de datos. Se utilizan métodos Java nativos para invocar las
funciones de API que realizan operaciones de base de datos. Los controladores
de tipo 2 son generalmente más rápidos que los controladores de tipo 1.
✓ Los controladores de tipo 2 necesitan tener instalado y configurado código binario
nativo para funcionar. Un controlador de tipo 2 siempre utiliza JNI (Java Native
Interface). Los controladores de tipo 2 no pueden utilizarse en un applet, ya que
los applets no pueden cargar código nativo. Un controlador JDBC de tipo 2 puede
requerir la instalación de algún software de red DBMS (sistema de gestión de bases
de datos).
✓ El controlador JDBC de Developer Kit para Java es de tipo 2.
- 16 -
16
Docente: Ms. Zoraida Yanet Vidal Melgarejo Tema: Conexión Java – MySQL
Página - 8 -
Universidad Facultad de Ingeniería
Nacional Programa de Estudios: Ingeniería de Sistemas
de Trujillo Experiencia Curricular: Programación Orientada a Objetos II
• 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.
- 17 -
17
• Native API
- 18 -
18
Docente: Ms. Zoraida Yanet Vidal Melgarejo Tema: Conexión Java – MySQL
Página - 9 -
Universidad Facultad de Ingeniería
Nacional Programa de Estudios: Ingeniería de Sistemas
de Trujillo Experiencia Curricular: Programación Orientada a Objetos II
• Middleware
✓ Estos controladores utilizan un protocolo de red y middleware para comunicarse
con un servidor. A continuación, el servidor convierte el protocolo a llamadas de
función DBMS específicas de DBMS.
✓ Los controladores de tipo 3 son la solución JDBC más flexible, ya que no requieren
ningún código binario nativo en el cliente. Un controlador de tipo 3 no necesita
ninguna instalación de cliente.
✓ 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.
- 19 -
19
• Middleware
✓ 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.
✓ 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.
- 20 -
20
Docente: Ms. Zoraida Yanet Vidal Melgarejo Tema: Conexión Java – MySQL
Página - 10 -
Universidad Facultad de Ingeniería
Nacional Programa de Estudios: Ingeniería de Sistemas
de Trujillo Experiencia Curricular: Programación Orientada a Objetos II
• Middleware
✓ 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.
- 21 -
21
• Controlador delgado
✓ El controlador de tipo 4 utiliza Java para implementar un protocolo de red de
proveedores de DBMS. Puesto que los protocolos son generalmente de propiedad,
los proveedores DBMS son generalmente las únicas empresas que suministran un
controlador JDBC de tipo 4.
✓ Los controladores de tipo 4 son todos ellos controladores Java. Esto significa que
no existe ninguna instalación ni configuración de cliente. Sin embargo, un
controlador de tipo 4 puede no ser adecuado para algunas aplicaciones si el
protocolo subyacente no maneja adecuadamente cuestiones tales como la
seguridad y la conectividad de red.
✓ El controlador JDBC de IBM® Toolbox para Java es de tipo 4, lo cual indica que la
API es un controlador de protocolo red Java puro.
- 22 -
22
Docente: Ms. Zoraida Yanet Vidal Melgarejo Tema: Conexión Java – MySQL
Página - 11 -
Universidad Facultad de Ingeniería
Nacional Programa de Estudios: Ingeniería de Sistemas
de Trujillo Experiencia Curricular: Programación Orientada a Objetos II
• Controlador delgado
✓ 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.
- 23 -
23
• Controlador delgado
- 24 -
24
Docente: Ms. Zoraida Yanet Vidal Melgarejo Tema: Conexión Java – MySQL
Página - 12 -
Universidad Facultad de Ingeniería
Nacional Programa de Estudios: Ingeniería de Sistemas
de Trujillo Experiencia Curricular: Programación Orientada a Objetos II
- 25 -
25
• A continuación, se muestra una lista de los drivers JDBC de las RDBMS más utilizadas.
- 26 -
26
Docente: Ms. Zoraida Yanet Vidal Melgarejo Tema: Conexión Java – MySQL
Página - 13 -
Universidad Facultad de Ingeniería
Nacional Programa de Estudios: Ingeniería de Sistemas
de Trujillo Experiencia Curricular: Programación Orientada a Objetos II
Sesión 08
Conexión desde
una aplicación en
Java a una Base de
Datos en MySQL
27
[Link](url, Obtener
usuario,contraseña); 2
la Conexión
[Link]();
Crear
[Link](sql); 3
el Comando
[Link](sql);
[Link](); Ejecutar
4
[Link](); el Comando (select)
[Link]();
Liberar Recursos 5
[Link]();
- 28 -
28
Docente: Ms. Zoraida Yanet Vidal Melgarejo Tema: Conexión Java – MySQL
Página - 14 -
Universidad Facultad de Ingeniería
Nacional Programa de Estudios: Ingeniería de Sistemas
de Trujillo Experiencia Curricular: Programación Orientada a Objetos II
2. Obtener la Conexión.
• Se obtiene una instancia de tipo [Link] mediante el DriverManager
3. Crear el Comando.
• Desde una instancia de Connection se pueden crear:
✓ Comandos Estáticos ([Link])
✓ Comandos Dinámicos ([Link])
✓ Llamadas a Procedimientos Almacenados ([Link])
- 29 -
29
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 [Link], 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.
- 30 -
30
Docente: Ms. Zoraida Yanet Vidal Melgarejo Tema: Conexión Java – MySQL
Página - 15 -
Universidad Facultad de Ingeniería
Nacional Programa de Estudios: Ingeniería de Sistemas
de Trujillo Experiencia Curricular: Programación Orientada a Objetos II
La clase
[Link]
• DriverManager es una clase (no una interface) que viene con la API, con lo cual, un
proveedor de BD no puede optimizar esta clase.
- 31 -
31
La clase [Link]
• 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 [Link]
✓ El gestor cargado debería registrarse con el método registerDriver
• [Link]
✓ Gestor de información y configuración general que se carga durante la
inicialización mediante:
o [Link]
o [Link]
✓ Se le pedirá información a lo largo del programa, residirá en memoria, dentro sus
métodos más importantes: connect y getPropertyInfo.
- 32 -
32
Docente: Ms. Zoraida Yanet Vidal Melgarejo Tema: Conexión Java – MySQL
Página - 16 -
Universidad Facultad de Ingeniería
Nacional Programa de Estudios: Ingeniería de Sistemas
de Trujillo Experiencia Curricular: Programación Orientada a Objetos II
[Link](“nombre_driver”);
[Link]("[Link]");
• El método forName se utiliza para cargar clases por reflexión, de forma indirecta.
- 33 -
33
2. Obtener la conexión
• [Link]
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.
- 34 -
34
Docente: Ms. Zoraida Yanet Vidal Melgarejo Tema: Conexión Java – MySQL
Página - 17 -
Universidad Facultad de Ingeniería
Nacional Programa de Estudios: Ingeniería de Sistemas
de Trujillo Experiencia Curricular: Programación Orientada a Objetos II
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:
[Link]("[Link]");
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 = [Link](url, user, password);
- 35 -
35
• [Link]
✓ Se utiliza el método createStatement de una instancia Connection para su
creación.
- 36 -
36
Docente: Ms. Zoraida Yanet Vidal Melgarejo Tema: Conexión Java – MySQL
Página - 18 -
Universidad Facultad de Ingeniería
Nacional Programa de Estudios: Ingeniería de Sistemas
de Trujillo Experiencia Curricular: Programación Orientada a Objetos II
• [Link]
✓ Se utiliza el método prepareStatement de una instancia Connection para su
creación.
• [Link]
✓ Se utiliza el método prepareCall de una instancia Connection para su creación.
- 37 -
37
• [Link]
✓ 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.
- 38 -
38
Docente: Ms. Zoraida Yanet Vidal Melgarejo Tema: Conexión Java – MySQL
Página - 19 -
Universidad Facultad de Ingeniería
Nacional Programa de Estudios: Ingeniería de Sistemas
de Trujillo Experiencia Curricular: Programación Orientada a Objetos II
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).
- 39 -
39
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).
- 40 -
40
Docente: Ms. Zoraida Yanet Vidal Melgarejo Tema: Conexión Java – MySQL
Página - 20 -
Universidad Facultad de Ingeniería
Nacional Programa de Estudios: Ingeniería de Sistemas
de Trujillo Experiencia Curricular: Programación Orientada a Objetos II
• [Link]
✓ 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).
- 41 -
41
5. Liberar Recursos
- 42 -
42
Docente: Ms. Zoraida Yanet Vidal Melgarejo Tema: Conexión Java – MySQL
Página - 21 -
Universidad Facultad de Ingeniería
Nacional Programa de Estudios: Ingeniería de Sistemas
de Trujillo Experiencia Curricular: Programación Orientada a Objetos II
- 43 -
43
try {
String url="jdbc:mysql://localhost:3306/eurekabank";
String user="root";
String password=“sa";
cn = [Link](url, user, password);
} catch(SQLException e) {
[Link](null,
"Error no se puede establecer la conexión“ + [Link]());
}
- 44 -
44
Docente: Ms. Zoraida Yanet Vidal Melgarejo Tema: Conexión Java – MySQL
Página - 22 -
Universidad Facultad de Ingeniería
Nacional Programa de Estudios: Ingeniería de Sistemas
de Trujillo Experiencia Curricular: Programación Orientada a Objetos II
- 45 -
45
- 46 -
46
Docente: Ms. Zoraida Yanet Vidal Melgarejo Tema: Conexión Java – MySQL
Página - 23 -
Universidad Facultad de Ingeniería
Nacional Programa de Estudios: Ingeniería de Sistemas
de Trujillo Experiencia Curricular: Programación Orientada a Objetos II
- 47 -
47
48
Docente: Ms. Zoraida Yanet Vidal Melgarejo Tema: Conexión Java – MySQL
Página - 24 -
Universidad Facultad de Ingeniería
Nacional Programa de Estudios: Ingeniería de Sistemas
de Trujillo Experiencia Curricular: Programación Orientada a Objetos II
try{
String sql = "select * from moneda";
PreparedStatement ps = [Link](sql);
ResultSet rs = [Link]();
while([Link]()) {
monecodigo=[Link](1);
monedescripcion=[Link](2);
[Link](monecodigo + “, “ + monedescripcion);
}
} catch(SQLException e) {
[Link](null, “Error en SQL “ + [Link]());
}
- 49 -
49
Resumen
• La clase Connection representa una sesión sobre una base de datos y es usada
para crear comandos (Statement).
- 50 -
50
Docente: Ms. Zoraida Yanet Vidal Melgarejo Tema: Conexión Java – MySQL
Página - 25 -