1. Acceso a base de datos con Java
desde aplicaciones web con la
tecnología JDBC
2. Bases de Datos en aplicaciones
• Aplicación que procese información
base de datos.
• Normalmente se utilizan bases de datos
relacionales.
• SQL: Lenguaje estándar para acceder a una
base datos.
2
3. Acceder a una base de datos
desde una aplicación
• Cómo puede enviar una aplicación sentencias SQL
a una BD.
• Interfaz procedural para ejecutar sentencias SQL.
• X/Open CLI (ISO 9075-3 “Call level interface”).
• ODBC es variante de Microsoft del X/Open CLI
(implementada en lenguaje C).
• La filosofía de estas APIs es que permitan acceder
de la misma forma a distintas BD.
3
4. JDBC
• Es un interfaz orientado a objetos de Java
para SQL.
• Se utiliza para enviar sentencias SQL a un
sistema gestor de BD (DBMS).
• Con JDBC tenemos que continuar
escribiendo las sentencias SQL.
• No añade ni quita potencia al SQL.
4
5. Arquitectura JDBC
• La filosofía de JDBC es proporcionar transparencia al
desarrollador frente al gestor de BD.
• JDBC utiliza un Gestor de Controladores que hace de
interfaz con el controlador específico de la BD.
Aplicación Java
Driver Manager de JDBC
Controlador Controlador Controlador
Oracle JDBC-ODBC DB2
SGBD SGBD
Oracle BD Access BD BD DB2 5
6. Clases e interfaces JDBC
• 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.
6
7. Núcleo de JDBC
• Estos interfaces se utilizarán el 90% de las veces que trabajemos con
una BD.
<<Interface>> <<Interface>> <<Interface>> <<Interface>>
Driver Connection Statement Result Set
<<Interface>> <<Int erface>>
DriverManager
PreparedStatement Res ult SetMet aData
<<Interface>>
DriverPropertyInfo
CallableStatement
7
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.
8
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.
9
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.
10
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().
11
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;
}
12
13. C lie n te :
D r iv e r M a n a g e r :
C o n n e c tio n
g e tC o n n e c tio n ( )
Conexión a la BD
13
Obtener conexión 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.
14
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:
jdbc:<subprotocolo>:<dominio>
• 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.
15
16. Código fuente de conexión
try
{ url de la BD
Connection con=
DriverManager.getConnection("jdbc:odbc:Biblio",
"","");
"","");
}
Usuario, clase de la BD
catch (SQLException e)
{
System.out.println(e);
}
16
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.
17
18. C lie n te :
D r iv e r M a n a g e r : : S ta te m e n t
C o n n e c tio n
g e tC o n n e c tio n ( )
c re a te S ta te m e n t( )
Obtener el objeto
Statement
18
Crear sentencia de BD
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.
19
20. Objetos involucrados en el
acceso a datos (diagrama de colaboración)
Objeto
ResultSet Objeto Driver Resultados
Programa JDBC BD
Java
Base de
datos
Objeto Objeto SQL
Statement Connection
20
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);
}
21
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.
22
23. C lie n te :
D r iv e r M a n a g e r : : S ta te m e n t : R e s u lt S e t
C o n n e c tio n
g e tC o n n e c tio n ( )
c re a te S ta te m e n t( )
e x e c u te Q u e r y ( )
Ejecutar la consulta
23
Ejecutar 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.
24
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)
...
25
26. C lie n te :
D r iv e r M a n a g e r : : S ta te m e n t : R e s u lt S e t
C o n n e c tio n
g e tC o n n e c tio n ( )
c re a te S ta te m e n t( )
e x e c u te Q u e r y ( ) Posicionar el cursor
en la siguiente fila
n e x t( )
g e tIn t( )
g e tS tr in g ( )
g e t B ig D e c im a l( )
Recuperar valores
Repetir mientras de las columnas.
haya filas que
procesar. 26
Recuperación valores resultado
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. 27
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);
}
28
29. C lie n te :
D r iv e r M a n a g e r : : S ta te m e n t : R e s u lt S e t
C o n n e c tio n
g e tC o n n e c tio n ( )
c re a te S ta te m e n t( )
e x e c u te Q u e r y ( )
n e x t( )
g e tIn t( )
g e tS tr in g ( )
g e t B ig D e c im a l( )
c lo s e ( )
c lo s e ( )
Liberar el objeto
Liberar el objeto Statement 29
Connection Librerar objetos
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)
...
30
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 31
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.
32
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().
33
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. 34
35. Extensiones JDBC al paquete
java.lang
• Amplían envoltorio Number para permitir albergar grandes números.
• Crean clases Exception especializadas.
Number Exception
BigDecimal SQLException
SQLWarning
Dat aTruncation
35
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.
36
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.
– http://industry.java.sun.com/products/jdbc/drivers
37
38. Controlador Tipo 1
• Puente JDBC-ODBC
Servidor
Cliente
DBC Serv. BD
oco lo O ODBC
Prot
Cliente
JDBC ODBC
BD Java
Protoc Serv. BD
olo OD
BC ODBC
38
39. Controlador Tipo 2
• Controlador utilizando APIs nativas
Servidor
Cliente
a tivo Serv. BD
oco lo n nativo
Prot
Cliente API
JDBC
BD Java nativa
39
40. Controlador Tipo 3
• Controlador JDBC-NET Java puro
Servidor
Cliente Serv. Serv. BD
r
o estánda JDBC nativo
Protocol
Cliente
JDBC
BD Java
Protoc Serv. Serv. BD
olo es
tá ndar JDBC nativo
40
41. Controlador Tipo 4
• Controlador Java puro y protocolo nativo
Servidor
Cliente Serv. BD
o n ativo nativo
ocol
Cliente Prot
JDBC
BD Java
41
42. Ejecución de distintas sentencias
SQL
• Tipos de sentencias SQL:
– Sentencias de definición de datos: CREATE TABLE,
CREATE INDEX.
– Sentencias de manipulación de datos: INSERT,
UPDATE, DELETE.
– Sentencias de consulta: SELECT.
• Cada tipo devuelve resultados distintos y
empleamos distintos métodos stmt.execute().
42
43. Sentencias preparadas
• Optimiza rendimiento en las sentencias que
se ejecutan repetidamente.
• Características:
– Sentencias en las que no se ponen
explícitamente determinados valores.
– La base de datos sólo tiene que interpretar la
sentencia la primera vez.
– Optimizan la ejecución.
43
44. Código fuente de sentencias
preparadas
PreparedStatement pstmt= con.prepareStatement(
"INSERT INTO Autores VALUES (?,?,?,?)");
// Establece valores para cada uno de los parametros
pstmt.setString(1,"Mario"); // Nombre
pstmt.setString(2,"Vargas Llosa"); // Apellidos
pstmt.setString(3,"Peru"); // Lugar nacimiento
pstmt.setInt(4,1953); // Anio nacimiento
int insCount= pstmt.executeUpdate();
// Establece valores para cada uno de los parametros
pstmt.setString(1,"Nicholas"); // Nombre
pstmt.setString(2,"Negroponte"); // Apellidos
pstmt.setString(3,"New York"); // Lugar nacimiento
pstmt.setInt(4,1953); // Anio nacimiento
int insCount= pstmt.executeUpdate();
44
45. Conjunto de resultados
desplazable
• Recorrido básico del ResultSet: cursor
hacia delante, de fila en fila y desde la
primera fila next().
• Podemos acceder a las filas del ResultSet de
más formas (JDBC 2.0), como un índice de
un array.
45
46. Creación de la sentencia para
Resultset desplazable
• Cambio en la creación del objeto sentencia:
– createStatement(int tipoResultSet,
int concurrenciaResultSet)
– tipoResultSet es el que permite flexibilidad en el
desplazamiento.
– Valores:
• TYPE_FORWARD_ONLY, sólo hacia delante
• TYPE_SCROLL_INSENSITIVE,
TYPE_SCROLL_SENSITIVE, métodos de posicionamiento
habilitados
46
47. Métodos de desplazamiento del
cursor
• Métodos
– Movimiento hacia atrás: afterLast(), previous().
– Posicionamiento absoluto: first(), last(),
absolute(numFila).
– Posicionamiento relativo: relative(num).
– Recupera fila actual: getRow().
47
48. Conjunto de resultados
actualizable
• Para actualizar datos en la BD teníamos que
recurrir a sentencias SQL: INSERT,
UPDATE, DELETE.
• Podemos realizar actualizaciones por
programa (JDBC 2.0).
48
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.
49
50. Métodos para actualizar filas
• Posicionarse en la fila para actualizar.
• Llamar a los métodos de actualización de
campos:
– updateXXX(<campo>,<valor>)
• Para confirmar las actualizaciones sobre la
tabla llamamos a: updateRow().
50
51. Insertando y borrando por
programa
• Métodos para insertar filas sin utilizar SQL:
– moveToInsertRow(), mueve a fila vacía.
– updateXXX(<campo>,<valor>) 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().
51
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.
52
53. Metadatos para SQL
• Types simplemente contiene constantes con los tipos de datos.
• DatabaseMetadata, proporciona información sobre la BD.
Object
<<Interface>>
Types
Dat abaseMetaData
53
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.
54
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 =1;x<=columnCount;x++)
{
String columnName= rsmd.getColumnName(x);
System.out.print(columnName +"t");
}
...
55
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 =1;x<=columnCount;x++)
{
if (rsmd.getColumnTypeName(x).compareTo("CURRENCY")
== 0)
System.out.print("$");
String resultStr = rs.getString(x);
System.out.print(resultStr +"t");
}
}
...
56
57. Utilización de transacciones
• Tratamiento conjunto de sentencias SQL.
• COMMIT y ROLLBACK
• Métodos para el tratamiento de
transacciones:
– commit(), roollback() y setAutoCommit().
57
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.
58
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).
59
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.
60
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.
62
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.
63
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.
64
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().
65
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.
66
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.
67
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.
68
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.
69
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 70
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.
71
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.
72
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.
73
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.
74
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.
75
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.
76
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.
77
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.
• Pide al JavaBean que realice la consulta.
<% BeanBd.obtenerFilas(); %>
78
79. JSP muestra resultados (y II)
• Recupera cada una de las filas.
<% for (int i= 0; i<BeanBd.numEle(); i++)
{ BeanBd.seleccionarFila(i); %>
<tr>
<td><jsp:getProperty name=”BeanBd”
property=“campo1”/></td>
<td><jsp:getProperty name=”BeanBd”
property=“campo2”/></td>
<td><jsp:getProperty name=”BeanBd”
property=“campo3”/></td>
</tr>
<% } %>
79
Notas do Editor
http://java.sun.com/products/jdbc/index.html
A partir de aquí se empieza a realizar el ejemplo de una consulta simple, a la vez que se va explicando.
Ejemplo de registro de un origen de datos ODBC para nuestro ejemplo. jdbc.drivers contiene una lista separada por el carácter ‘:’ con todos los nombres de clase de los controladores.
EjConexion.java
EjEjecucion.java
EjEjecucion.java
EjEjecucion.java
Compilar y probar ejemplo de consulta simple. Desde aquí posemos: 1. Saltar al acceso a BD desde servlets donde combinamos los conceptos de JDBC con los de servles. 2. Seguir profundizando en JDBC.