Title:Acceso a base de datos con Java desde aplicaciones web con la tecnologa JDBC
Description:
Normalmente se utilizan bases de datos relacionales. ... Se utiliza para enviar sentencias SQL a un sistema gestor de BD (DBMS) ... – PowerPoint PPT presentation
La especificación JDBC incluye 8 interfaces y 10 clases en el paquete estándar java.sql.
Podemos dividirlos en los siguientes grupos
Nucleo de JDBC interfaces y clases que todos los controladores deben implementar.
Extensiones al paquete java.lang extensiones para SQL.
Extensiones al paquete java.util son extensiones a java.util.Date.
Metadatos para SQL permiten examinar dinámicamente las propiedades de BD y controladores.
7 Núcleo de JDBC
Estos interfaces se utilizarán el 90 de las veces que trabajemos con una BD.
8 Invocar una consulta SQL
Vamos a estudiar un escenario en el que realizaremos una consulta sobre una BD con JDBC.
Mediante el seguimiento de un diagrama de secuencia veremos las clases en funcionamiento.
Cliente representa a la aplicación Java donde implementamos la consulta.
Un buen ejercicio sería ir escribiendo el programa a la vez que vamos viendo cada una de las fases.
9 Configuración de la conexión con base de datos
Antes de conectar con la base de datos y trabajar con ella debemos tener en cuenta dos cuestiones
Registrar un controlador.
Convenciones de nombres para la base de datos.
10 Carga de un controlador (I)
Determinados controladores requerirán la instalación y configuración de software específico en el cliente. Ejemplo el origen ODBC o la fuente de datos nativa.
Otros controladores son simplemente una clase Java y bastará que la máquina virtual de Java las pueda localizar mediante el classpath.
11 Carga de un controlador (y II)
Dos alternativas
Utilizar una propiedad del sistema (jdbc.drivers).
Cargar la clase de forma explícita con la llamada Class.forName().
La propia clase llamará al método registerDriver() de la clase DriverManager que dejará registrado el controlador para utilizarlo posteriormente.
Consultar que los controladores registrados con DriverManager.getDrivers().
12 Código fuente de carga del controlador de la BD
try
Class.forName(sun.jdbc.odbc.JdbcOdbcDriver)
catch (ClassNotFoundException e)
System.out.println(Error en la carga del driver JDBC)
return
Class.forName(sun.jdbc.odbc.JdbcOdbcDriver) 13 Obtener conexión BD Conexión a la BD 14 Abrir una conexión
Previamente habremos registrado el controlador.
DriverManager.getConnection(url).
El parámetro imprescindible es la url de la base de datos para especificar la base de datos que queremos utilizar.
También se puede especificar el usuario y la clave con los que nos queremos conectar a la base de datos.
15 Nombres para las BD en JDBC
En JDBC las bases de datos se designan mediante una URL.
La forma de la url es la siguiente
jdbcltsubprotocologtltdominiogt
Subprotocolo identifica el mecanismo de conexión o el controlador JDBC concreto.
Dominio Depende del subprotocolo puede ser simplemente un nombre simple para la base de datos o una serie de parámetros que permiten encontrar la BD.
16 Código fuente de conexión
try
Connection con
DriverManager.getConnection(jdbcodbcBiblio
)
catch (SQLException e)
System.out.println(e)
url de la BD Connection con DriverManager.getConnection(jdb codbcBiblio ) Usuario clase de la BD 17 El objeto Connection
Si no se producen excepciones el método getConnection nos devuelve un objeto que implementa la interfaz Connection.
Podemos crear varias conexiones con distintas bases de datos o incluso con la misma.
Cada conexión representa una sesión con la BD.
El objeto Connection nos permitirá acceder a la base de datos para realizar operaciones sobre ella y obtener resultados.
18 Crear sentencia de BD Obtener el objeto Statement 19 Acceso a los datos
Utilizamos la conexión con la base de datos creada anteriormente para enviar comandos y sentencias SQL.
El objeto conexión funciona como un enlace directo con el controlador de la BD.
Creamos un objeto de la clase Statement que servirá de envoltorio para las sentencias SQL.
Cuando pasamos la SQL a la conexión este lo envía al controlador que a su vez lo redirecciona a la BD que nos devolverá los resultados.
20 Objetos involucrados en el acceso a datos (diagrama de colaboración) Objeto ResultSet Resultados Objeto Driver JDBC BD Programa Java Base de datos Objeto Connection SQL Objeto Statement 21 Código fuente de creación de una sentencia de consulta
try
// Creamos el objeto sentencia
Statement stmt con.createStatement()
...
catch (Exception e)
System.out.prinln(e)
// Creamos el objeto sentencia Statement stmt con.createStatement() 22 Creación del objeto Statement
La clase Connection tiene varios métodos que permiten crear un objeto Statement o una de sus variantes.
createStatement para crear sentencias simples.
prepareStatement para sentencias que pueden contener parámetros optimiza la utilización repetida de estas sentencias.
prepareCall.
23 Ejecutar consulta Ejecutar la consulta 24 Ejecución de la sentencia
executeQuery() ejecución de consultas sentencia SELECT.
executeUpdate() actualizaciones de valores en al base de datos. INSERT UPDATE DELETE. Sólo devuelve la cuenta de las columnas afectadas.
execute() se usa para ejecutar sentencias que no se conocen a priori o que devuelven resultados no homogéneos.
25 Código fuente de ejecución de una sentencia
try
...
// Ejecutamos una sentencia SQL
ResultSet rs
stmt.executeQuery(SELECT Titulo ISBN
Fecha_edicion Paginas Precio
FROM LIBROS
WHERE Titulo LIKE jdbc)
catch (SQLException e)
...
26 Recuperación valores resultado Posicionar el cursor en la siguiente fila Recuperar valores de las columnas. Repetir mientras haya filas que procesar. 27 Recuperación de datos
Cuando ejecutamos una consulta debemos emplear el método executeQuery() que devuelve un objeto ResultSet que nos permitirá acceder a los resultados.
El ResultSet utiliza el concepto de cursor de base de datos para ir moviéndose por las filas de datos recuperadas.
Las columnas pueden accederse en cualquier orden utilizando su posición o su nombre.
El objeto ResultSet incluye métodos getXXX que permiten recuperar valores de distintos tipos.
28 Código fuente de recuperación de datos
...
while (rs.next())
// Se recupera cada columna por separado
String titulo rs.getString(Titulo)
Date fechaEdicion rs.getDate(Fecha_edicion)
int pags rs.getInt(Paginas)
double precio rs.getDouble(Precio)
// Operación que realizamos con cada fila
System.out.println(Titulo titulo edición fechaEdicion)
29 Librerar objetos Liberar el objeto Statement Liberar el objeto Connection 30 Código fuente de liberación de recursos de BD
try
...
// Liberamos objeto sentencia
stmt.close()
// Liberamos objeto conexión BD
con.close()
catch (SQLException e)
...
31 Resumen proceso consulta simple
Registrar controlador Class.forName.
Abrir conexión DriverManager.getConnection.
Crea sentencia con.createStatement.
Ejecuta la sentencia stmt.executeQuery.
Procesar resultados while(rs.next()) ...
Cerrar sentencia y conexión close.
Ver Acceso a BD desde servlets 32 Profundizando en la utilización de JDBC
Manejo de las excepciones de SQL
Utilización de diferentes BD.
Ejecución de distintas sentencias SQL.
Sentencias preparadas.
Conjuntos de resultados.
Desplazamiento y actualización por programa.
Metadatos.
33 Manejo de las excepciones de SQL
SQLException
Es la principal forma que tiene JDBC de informar de errores.
Hereda de la clase Exception de java.lang.
Proporciona la siguiente información sobre el error
Una cadena describiendo el error a la que se puede acceder con el método getMessage().
La cadena de error SQLstate de acuerdo con el estándar X/Open a la que se puede acceder con el método getSQLState().
Un código de error entero específico de la BD que se puede acceder con getErrorCode().
Permite acceder a más errores con getNextException().
34 Manejo de los avisos de SQL
SQLWarning
Permite informar de errores leves en distintos objetos de la BD ResultSet Statement Connection.
Al contrario que SQLException no es obligatorio capturar los SQLWarning.
Para obtener un SQLWarning se llama al método getWarning() sobre el objeto.
Para obtener SQLWarning adicionales se llama a getNextWarning().
DataTruncation
Informa de avisos de truncado de datos en las lecturas y al escribir datos.
35 Extensiones JDBC al paquete java.lang
Amplían envoltorio Number para permitir albergar grandes números.
Crean clases Exception especializadas.
36 Utilización de diferentes BD
JDBC permite utilizar distintas bases de datos sin cambiar el código o haciendo retoques mínimos.
Cambios que implica la utilización de una BD diferente
controlador
url de la BD.
Otros posibles cambios.
37 Tipos de controladores
JDBC es una especificación que establece dos tipos de interfaces
Interfaz de aplicación que permite acceder a una base de datos independientemente de su fabricante.
Interfaz del controlador al cual se deben adaptar los desarrolladores de controladores.
Actualmente en el mercado existen gran cantidad de controladores que varían en su arquitectura. Sun ha clasificado estos controladores en cuatro tipos.
Para actualizar datos en la BD teníamos que recurrir a sentencias SQL INSERT UPDATE DELETE.
Podemos realizar actualizaciones por programa (JDBC 2.0).
49 Creación de la sentencia para Resultset actualizable
Cambio en la creación del objeto sentencia
createStatement(int tipoResultSet int concurrenciaResultSet)
concurrenciaResultSet es el que permite actualizar ResultSet por programa.
Valores
CONCUR_READ_ONLY no se puede actualizar.
CONCUR_UPDATABLE permite la utilización de métodos para modificar filas.
50 Métodos para actualizar filas
Posicionarse en la fila para actualizar.
Llamar a los métodos de actualización de campos
updateXXX(ltcampogtltvalorgt)
Para confirmar las actualizaciones sobre la tabla llamamos a updateRow().
51 Insertando y borrando por programa
Métodos para insertar filas sin utilizar SQL
moveToInsertRow() mueve a fila vacía.
updateXXX(ltcampogtltvalorgt) sobre cada campo de la nueva fila.
insertRow() confirma inserción.
Método para borrar filas sin utilizar SQL
Posicionarnos sobre la fila a borrar.
deleteRow().
52 Información acerca de la base de datos (Metadatos)
Cuando a priori no tenemos información sobre la estructura de la base de datos podemos acceder a ella mediante los metadatos.
Esto permite adaptar el acceso que está realizando nuestra aplicación a una BD concreta en tiempo de ejecución.
Objeto Connection al que aplicamos el método getMetaData() que devuelve un objeto que implementa la interfaz DatabaseMetaData.
53 Metadatos para SQL
Types simplemente contiene constantes con los tipos de datos.
DatabaseMetadata proporciona información sobre la BD.
54 Información sobre el resultado de una consulta
Muchas veces no conocemos lo que va a devolver una consulta SELECT FROM Usuarios.
JDBC permite obtener un objeto que implementa ResultSetMetaData al aplicar el método getMetada() a un objeto ResultSet.
De esta forma podemos obtener datos como número de columnas devueltas y el nombre de una determinada columna.
Esto permite la ejecución y recuperación de resultados de forma dinámica.
55 Código fuente de recuperación de metadatos
ResultSet rs stmt.executeQuery(sqlStr)
ResultSetMetaData rsmd rs.getMetaData()
int columnCount rsmd.getColumnCount()
// Vamos imprimiendo los nombres de cada columna
for(int x 1xltcolumnCountx)
String columnName rsmd.getColumnName(x)
System.out.print(columnName \t)
...
56 Código fuente de recuperación de metadatos (cont.)
// Recorremos filas e imprimimos los valores de cada columna
while(rs.next())
for(int x 1xltcolumnCountx)
if (rsmd.getColumnTypeName(x).compareTo(CURRE NCY) 0)
System.out.print()
String resultStr rs.getString(x)
System.out.print(resultStr \t)
...
57 Utilización de transacciones
Tratamiento conjunto de sentencias SQL.
COMMIT y ROLLBACK
Métodos para el tratamiento de transacciones
commit() roollback() y setAutoCommit().
58 Ampliaciones al tratamiento básico de BD
Versiones JDBC
JDBC 1.0
JDBC 2.0
JDBC Optional Package (inicialmente se le llamó standard extension API) paquete javax.sql. Es necesario si queremos utilizar objetos DataSource o Rowset. Está incluido en la J2EE. Si tenemos la J2SE podemos bajarlo por separado.
JDBC 3.0 paquetes java.sql y javax.sql está integrado en la plataforma J2SE 1.4.
59 Características incluye JDBC 2.0 (I)
El recorrido del ResultSet no se limita al avance.
Actualización de los datos de la base de datos mediante métodos.
Envío de múltiples sentencias SQL de actualización a la BD para que las trate como una unidad (Batch updates).
Utilización de tipos de datos SQL3.
Creación y utilización de nuevos tipos SQL definidos por el usuario (UDTs).
60 Características incluye JDBC 2.0 (y II)
Fuentes de datos como alternativa a getConnection.
Creación de conexiones como pools de conexiones.
RowSets.
61 Acceso a base de datos desde Servlets y JSP 62 Acceso a base de datos desde Servlets
La mayoría de las aplicaciones comerciales basadas en servlets utilizan bases de datos.
El acceso a base de datos desde un servlet es igual al que se puede realizar desde cualquier aplicación java.
Se utiliza la tecnología JDBC de Java.
63 JDBC en un Servlet
Para emplear JDBC en un Servlet simplemente hay que incluir los paquetes de java adecuados.
Debemos tener en cuenta los distintos tipos de controladores JDBC y cual nos interesa emplear como en otros entornos.
Se utilizan exactamente las mismas interfaces y las mismas clases para conectarnos y extraer información de la base de datos que en cualquier otra aplicación Java.
64 Escenario común servlets y BD
Vamos a representar un escenario común en cualquier aplicación que utiliza servlets y BD.
Tenemos un formulario HTML en el que el usuario introduce datos.
Con los datos del formulario construimos una consulta que realizamos sobre la BD.
Los resultados se los devolvemos al usuario en otra página HTML.
Ejercicio ir escribiendo el programa a la vez que vamos viendo cada una de las fases.
65 Conexión a la base de datos
Respecto al rendimiento el mayor cuello de botella se produce al crea un objeto Connection para conectarnos a la BD.
Debemos evitar tener que hacerlo repetidamente.
Código de creación de la conexión con la BD en la inicialización del servlet que se produce sólo una vez método init().
66 Recuperar datos del formulario de consulta
Una vez conectados el resto del código de acceso a BD estará en los métodos doGet() o doPost().
Recuperamos los valores de los campos que ha introducido en el formulario que lanza la consulta.
67 Construcción de la consulta
Construiremos la cadena que constituye la sentencia SQL que posteriormente ejecutaremos contra la base de datos.
Normalmente habrá una parte fija que no varía y unos parámetros que crearemos a partir de la información del formulario.
68 Ejecución de la consulta y devolución de resultados
Una vez construida la consulta la enviamos a la BD para su ejecución.
Si existe algún problema debemos devolver un error al usuario.
Si la ejecución fue correcta debemos devolver los resultados de la ejecución.
69 Cierre de la conexión
Debemos asegurarnos que en el método destroy() del servlet se cierren todas las conexiones.
El recolector de basura podrá liberar todos los recursos.
70 BD desde un servlet
Conexión con la BD.
Recuperar parámetros del formulario de consulta.
Construir la sentencia.
Ejecución de la consulta y devolución de resultados.
Cierre de la conexión.
Ver acceso a BD desde JSP 71 Sentencias preparadas en la construcción de sentencias
Principal uso de las sentencias preparadas mejorar rendimiento.
También permiten evitar errores sintácticos en la construcción de la sentencia SQL en el servlet.
El usuario podría meter caracteres reservados (ej. ) en el parámetro.
El uso de setString() evita la confusión del analizador de sentencias de la BD.
72 Acceso a base de datos desde JSP
JSP utiliza JDBC para acceder a base de datos.
No necesita etiquetas especiales para acceder a base de datos.
73 JSP con el código de acceso a BD incrustado
Uso de scritplets que utilizan JDBC para acceder a la BD.
No es necesaria la captura de excepciones JSP hace el trabajo automáticamente.
Cuando recuperamos resultados de una consulta aparecerá código HTML dentro del bucle para ir mostrando cada fila.
Realizar ejemplo de acceso a BD con scritplets.
74 Acceso a través de Beans
Una forma habitual de utilizar BD con JSP es utilizar componentes JavaBean de apoyo.
De esta forma mantenemos independiente la presentación y el acceso a datos esto es fundamental para facilitar el mantenimiento de la aplicación.
75 Proceso para recuperar datos a través de un JavaBean
El Bean se encarga de conectar con la BD y ejecutar la sentencia deseada.
El bean proporciona métodos para posicionarse en cada fila de la consulta.
A través de las propiedades del JavaBean podemos acceder a los valores de cada uno de los campos.
Las propiedades de un JavaBean se representan muy fácil en una página JSP.
76 Estructura del JavaBean para acceso a BD
Constructor del JavaBean
conexión con la base de datos.
realización de la consulta.
Guardar resultados en una estructura local al Bean.
establecer los valores de las propiedades.
cerrar la conexión.
Método para recorrer los resultados.
Recargando las propiedades cada vez que cambie.
Propiedades se corresponden con los campos de la tabla.
77 Ejemplo JavaBean BD
Ejemplo sencillo de un JavaBean que permite recuperar resultados de una BD.
Métodos básicos
obtenerFilas() hace la consulta sobre la BD y guarda resultados en un vector interno.
seleccionarFila(int f) se posiciona en el elemento f del vector y carga en cada uno de los atributos los valores de los campos.
78 JSP muestra resultados (I)
Realizamos una página JSP que utilizando el Bean anterior muestre todas las filas de la consulta en una tabla.
PowerShow.com is a leading presentation/slideshow sharing website. Whether your application is business, how-to, education, medicine, school, church, sales, marketing, online training or just for fun, PowerShow.com is a great resource. And, best of all, most of its cool features are free and easy to use.
You can use PowerShow.com to find and download example online PowerPoint ppt presentations on just about any topic you can imagine so you can learn how to improve your own slides and presentations for free. Or use it to find and download high-quality how-to PowerPoint ppt presentations with illustrated or animated slides that will teach you how to do something new, also for free. Or use it to upload your own PowerPoint slides so you can share them with your teachers, class, students, bosses, employees, customers, potential investors or the world. Or use it to create really cool photo slideshows - with 2D and 3D transitions, animation, and your choice of music - that you can share with your Facebook friends or Google+ circles. That's all free as well!
For a small fee you can get the industry's best online privacy or publicly promote your presentations and slide shows with top rankings. But aside from that it's free. We'll even convert your presentations and slide shows into the universal Flash format with all their original multimedia glory, including animation, 2D and 3D transition effects, embedded music or other audio, or even video embedded in slides. All for free. Most of the presentations and slideshows on PowerShow.com are free to view, many are even free to download. (You can choose whether to allow people to download your original PowerPoint presentations and photo slideshows for a fee or free or not at all.) Check out PowerShow.com today - for FREE. There is truly something for everyone!