1. Let's Rock Java
Fundamentos de Java Enterprise Edition
con JDeveloper
Eudris Cabrera Rodriguez
Ingeniero Telemático
Senior Software Developer
Skype:eudriscabrera
LinkedIn:http://www.linkedin.com/in/eudriscabrera
Noviembre 2011, Santiago de los Caballeros, R. D.
2. Objetivos
Aprender los conceptos fundamentales de conectividad de la
plataforma Java a Base de Datos, mediante el uso del Java Database
Connectivity API (JDBC).
3. Agenda
○ Conectividad de Java a Base de Datos(JDBC)
■ Introducción a JDBC.
■ Selección y Configuración del Driver.
■ Creando una Conexión.
■ Uso de Statements y ResultSets.
○ Realizar ejemplos de aplicaciones web interactuando
con la base de datos.
4. Conectividad de Java a Base de Datos(JDBC)
Introducción a JDBC:
Java Database Connectivity, más conocida por sus siglas
JDBC, es una API que permite la ejecución de operaciones
sobre bases de datos desde el lenguaje de programación
Java, independientemente del sistema operativo donde se
ejecute o de la base de datos a la cual se accede, utilizando
el dialecto SQL del modelo de base de datos que se utilice.
El API JDBC se presenta como una colección de interfaces
Java y métodos de gestión de manejadores de conexión
hacia cada modelo específico de base de datos.
5. Conectividad de Java a Base de Datos(JDBC)
Un manejador de conexiones hacia un modelo de base de datos en
particular es un conjunto de clases que implementan las interfaces
Java y que utilizan los métodos de registro para declarar los tipos de
localizadores a base de datos (URL) que pueden manejar.
Para utilizar una base de datos particular, el usuario ejecuta su
programa junto con la biblioteca de conexión apropiada al modelo
de su base de datos, y accede a ella estableciendo una conexión, para
ello provee el localizador a la base de datos y los parámetros de
conexión específicos.
6. Conectividad de Java a Base de Datos(JDBC)
Un manejador de conexiones hacia un modelo de base de datos en
particular es un conjunto de clases que implementan las interfaces
Java y que utilizan los métodos de registro para declarar los tipos de
localizadores a base de datos (URL) que pueden manejar.
Para utilizar una base de datos particular, el usuario ejecuta su
programa junto con la biblioteca de conexión apropiada al modelo
de su base de datos, y accede a ella estableciendo una conexión, para
ello provee el localizador a la base de datos y los parámetros de
conexión específicos.
7. Conectividad de Java a Base de Datos(JDBC)
A partir de allí puede realizar con cualquier tipo de tareas con la
base de datos a las que tenga permiso: consulta, actualización,
creación, modificación y borrado de tablas, ejecución de
procedimientos almacenados en la base de datos, etc.
10. Selección y Configuración del Driver
Class.forName("Nombre del driver");
Con esta instrucción cargamos el driver de conexión a la base de
datos en MySQL. El driver debe de ser incluido con el classpath
para poder ser usado en el proyecto.
// Carga dinámica del driver
Class.forName("jdbc.DriverASCII")
11. Creando una Conexión
Luego de cargar el Driver, es necesario crear la conexión a la base
de datos.
Para ello usamos el método getConnection de la clase
DriverManager (que implementa la clase Driver).
A dicho método le pasamos como parámetro una URL de conexión
a la base de datos, que se compone, por lo general, de tres partes
separados por ":", jdbc:nombre_dbms:datos_de_conexion.
Aunque esto depende del tipo de DMBS y conector que usemos.
(Para más detalles de la URL, ver la documentación específica para
el conector).
12. Creando una Conexión
Este método además, devuelve un objeto Connection que usaremos
para crear y ejecutar sentencias SQL, sobre la base de datos.
DriverManager
static Connection getConnection(
String especBD,
String nombreUsuario,
String clave)
14. Uso de Statements y ResultSets
createStatement(): este método crea/devuelve un objeto
Statement, con el cual podremos ejecutar sentencias en la
base de datos.
Statement
void executeUpdate(String SQLupdateExpr)
ResultSet executeQuery(String SQLqueryExpr)
ExecuteQuery(): este método sirve para ejecutar
consultas sobre la base de datos (para inserción y
modificación de datos usar executeUpdate()). Recibe
como parametro una sentencia SQL, y devuelve un objeto
ResultSet que contendrá los datos de la consulta.
15. Uso de Statements y ResultSets
ResultSet
// Representa un conjunto de registros
// que se pueden modificar iterativamente
Bool next()
String getString(String nombreColumna)
Float getFloat (String nombreColumna)
16. Excepciones generadas por JDBC
Las excepciones que manejamos son básicamente:
ClassNotFoundException, que se lanzará por lo general
cuando el programa no encuentre el Driver.
SQLException, que se lanzará cuando hayan errores a
nivel de SQL (errores al insertar datos, errores de sintaxis
en las consultas, etc.).
17. Uso básico de JDBC II
Statement stmt = con.createStatement();
stmt.executeUpdate( “CREATE TABLE CUENTA (...)”);
stmt.executeUpdate(“INSERT INTO CUENTA (...)” + “VALUES
(...)”);
stmt.executeUpdate(“UPDATE CUENTA ...”);
stmt.executeUpdate( “DELETE FROM CUENTA ...”);
ResultSet rs = stmt.executeQuery( “SELECT ... FROM
CUENTA, ...”);
while(rs.next()) {
String nombre = rs.getString(“nombre”);
Integer dni = rs.getInteger(“dniCliente”);
Integer cc = rs.getInteger(“numCuenta”);
Integer s = rs.getInteger(“saldo”);
System.out.println( nombre + “” + dni + “” + cc + “” + s);
}
18. Uso básico de JDBC
ClassforName(“jdbc.DriverASCII”);
Connection con = DriverManager.getConnection(
“jdbc:odbc:cuentas”, “rmoriyon”, “cursofse”);
19. JDBC: Transacciones
con.setAutoCommit(false);
stmt.execute...
if (s > 1000) con.commit();
else con.rollBack();
21. Cuando usar servlets y cuando usar páginas JSP ?.
La pregunta es lógica, al fin y al cabo ambos mecanismos
permiten generar contenidos dinámicos y además las JSP
son servlets generados por el servidor de aplicaciones.
La norma es que la mayor parte de las interacciones con el
usuario se realizarán en las JSP debido a su flexibilidad, ya
que integran de forma natural etiquetas HTML, XML, JSF,
etc.
Los servlets serán la excepción (un ejemplo típico es usar un
servlet como controlador (un controlador recibe peticiones o
eventos desde el interfaz de cliente y "sabe" el
componente que debe invocar).
22. Diversos escenarios de aplicación de la arquitectura JEE
Escenario basado en la web (web-centric application):
La plataforma JEE no obliga a usar en un sistema todas las
capas. Lo esencial es escoger el mecanismo adecuado para
el problema.
En este sentido, en ocasiones no hay (ni prevemos que haya)
la complejidad como para requerir una capa EJB.
Se denomina escenario web-centric porque el contenedor
web es el que realiza gran parte del trabajo del sistema
23. Diversos escenarios de aplicación de la arquitectura JEE
Escenario basado en la web (web-centric application):
24. Diversos escenarios de aplicación de la arquitectura JEE
Escenario basado en la web (web-centric application):
En este tipo de escenario la capa web implica tanto lógica de
presentación como lógica de negocio. Pero lo deseable es no
mezclar todas las cosas, planteando un diseño limpio y
modular.
Para ello las JSP y servlets no suelen acceder de forma
directa a la base de datos, sino que lo hacen por medio de un
servicio de acceso a datos.
25. Diversos escenarios de aplicación de la arquitectura JEE
Escenario basado en la web (web-centric application):
El escenario web-centric es el más ampliamente utilizado
actualmente.
26. Nota sobre MVC
Es muy usual utilizar el patrón MVC(Model View Controller )
como patrón arquitectónico.
En este patrón el modelo representa los datos y las reglas de
negocio que determinan el acceso y modificación de los
datos.
La vista traduce los contenidos del modelo a un o unos
modos de presentación.
Cuando el modelo cambia, es responsabilidad de la vista
mantener la consistencia de la presentación.
27. Nota sobre MVC
El controlador define el comportamiento de la aplicación, es
decir, asocia (map) las peticiones del usuario (captadas por
botones, ítems de menú, etc.) con acciones realizadas por
componentes del modelo.
En una aplicación web las peticiones aparecen como
peticiones HTTP que usan normalmente el método POST o
GET para invocar a la capa web.
El controlador es el responsable de seleccionar la vista que
debe responder a la petición realizada por el usuario.
28. Nota sobre MVC
En el escenario web-centric que en bastantes ocasiones las
aplicaciones no requieren acceder a múltiples
sistemas empresariales, es decir, la capa de lógica de
negocio no requiere fuerte conectividad distribuida con
sistemas empresariales.
No se contemplan EJBs, pero esto no significa que
desaparezcan los componentes del modelo, sino que los
servicios del modelo se implementan en JavaBeans (no
Enterprise JavaBeans) para ser utilizados por Servlets/JSP
dentro de la capa web
30. Nota sobre MVC
En una aplicación centrada en la capa Web sigue existiendo,
aunque sea ligera, un modelo, que contiene entidades y
reglas de negocio; es decir, el que no sean necesarios los
EJB no implica no modularizar, mezclarlo todo y eliminar
los componentes del modelo.
Nota: La especificación JEE no considera como
componentes JEE a los Java Beans ya que son diferentes de
los EJB (no confundirlos).
La arquitectura de componentes JavaBeans se pueden
utilizar tanto en la capa de cliente como de servidor,
mientras que los componentes Enterprise JavaBeans sólo se
utilizan en la capa de negocio como parte de los servicios del
servidor.