Java Base de Datos Jsp

79
Acceso a base de datos con Java desde aplicaciones web con la tecnología JDBC

Transcript of Java Base de Datos Jsp

Page 1: Java Base de Datos Jsp

Acceso a base de datos con Java desde aplicaciones web con la

tecnología JDBC

Page 2: Java Base de Datos Jsp

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.

Page 3: Java Base de Datos Jsp

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.

Page 4: Java Base de Datos Jsp

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.

Page 5: Java Base de Datos Jsp

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.

Driver Manager de JDBC

ControladorOracle

BD

ControladorJDBC-ODBC

ControladorDB2

Aplicación Java

BDBDSGBDOracle Access

SGBDDB2

Page 6: Java Base de Datos Jsp

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.

Page 7: Java Base de Datos Jsp

7

Núcleo de JDBC• Estos interfaces se utilizarán el 90% de las veces que trabajemos con

una BD.

Driver<<Interface>>

Connection<<Interface>>

Statement<<Interface>>

ResultSet<<Interface>>

DriverManager

DriverPropertyInfo CallableStatement<<Interface>>

PreparedStatement<<Interface>>

ResultSetMetaData<<Interface>>

Page 8: Java Base de Datos Jsp

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.

Page 9: Java Base de Datos Jsp

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.

Page 10: Java Base de Datos Jsp

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.

Page 11: Java Base de Datos Jsp

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().

Page 12: Java Base de Datos Jsp

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");

Page 13: Java Base de Datos Jsp

13

: DriverM anager

Cliente

getC onnection( )

: C onnec tion

Conexión a la BD

Obtener conexión BD

Page 14: Java Base de Datos Jsp

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.

Page 15: Java Base de Datos Jsp

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.

Page 16: Java Base de Datos Jsp

16

Código fuente de conexión

try

{

Connection con=

DriverManager.getConnection("jdbc:odbc:Biblio",

"","");

}

catch (SQLException e)

{

System.out.println(e);

}

Connection con=

DriverManager.getConnection("jdbc:odbc:Biblio",

"","");

url de la BD

Usuario, clase de la BD

Page 17: Java Base de Datos Jsp

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.

Page 18: Java Base de Datos Jsp

18

: DriverM anager

Cliente

getC onnection( )

: C onnec tion

crea teStatem ent( )

: Sta tem ent

Obtener el objeto Statement

Crear sentencia de BD

Page 19: Java Base de Datos Jsp

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.

Page 20: Java Base de Datos Jsp

20

Objetos involucrados en el acceso a datos (diagrama de colaboración)

ProgramaJava

Objeto Driver JDBC BD

Base dedatos

ObjetoConnection

ObjetoStatement

SQL

ResultadosObjeto

ResultSet

Page 21: Java Base de Datos Jsp

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();

Page 22: Java Base de Datos Jsp

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.

Page 23: Java Base de Datos Jsp

23

: DriverM anager

Cliente

getC onnection( )

: C onnec tion

crea teStatem ent( )

: Sta tem ent

executeQ uery( )

: R esu ltS et

Ejecutar la consulta

Ejecutar consulta

Page 24: Java Base de Datos Jsp

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.

Page 25: Java Base de Datos Jsp

25

Código fuente de ejecución de una sentencia

try{

[...]

// Ejecutamos una sentencia SQLResultSet rs=stmt.executeQuery("SELECT Titulo, ISBN," + " Fecha_edicion, Paginas, Precio" + " FROM LIBROS" + " WHERE Titulo LIKE '%jdbc%'");

}catch (SQLException e)...

Page 26: Java Base de Datos Jsp

26

: DriverM anager

Cliente

getC onnection( )

: C onnec tion

crea teStatem ent( )

: Sta tem ent

executeQ uery( )

: R esu ltS et

next( )

getIn t( )

getString( )

getB igD ecim al( )

Posicionar el cursor en la siguiente fila

Recuperar valores de las columnas.Repetir mientras

haya filas que procesar.

Recuperación valores resultado

Page 27: Java Base de Datos Jsp

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.

Page 28: Java Base de Datos Jsp

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 filaSystem.out.println("Titulo: " + titulo + ", edición: " + fechaEdicion);

}

Page 29: Java Base de Datos Jsp

29

: DriverM anager

Cliente

getC onnection( )

: C onnec tion

crea teStatem ent( )

: Sta tem ent

executeQ uery( )

: R esu ltS et

next( )

getIn t( )

getString( )

getB igD ecim al( )

c lose( )

c lose( )

Liberar el objeto Connection

Liberar el objeto Statement

Librerar objetos

Page 30: Java Base de Datos Jsp

30

Código fuente de liberación de recursos de BD

try{

[...]

// Liberamos objeto sentenciastmt.close();

// Liberamos objeto conexión BDcon.close();

}catch (SQLException e)...

Page 31: Java Base de Datos Jsp

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

Page 32: Java Base de Datos Jsp

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.

Page 33: Java Base de Datos Jsp

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().

Page 34: Java Base de Datos Jsp

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.

Page 35: Java Base de Datos Jsp

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

DataTruncation

Page 36: Java Base de Datos Jsp

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.

Page 37: Java Base de Datos Jsp

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

Page 38: Java Base de Datos Jsp

38

Controlador Tipo 1

• Puente JDBC-ODBC

Cliente

Servidor

Cliente BD Java

JDBC ODBC

Serv.ODBC

BD

Protocolo ODBC

Serv.ODBC

BDProtocolo ODBC

Page 39: Java Base de Datos Jsp

39

Controlador Tipo 2

• Controlador utilizando APIs nativas

Cliente

Servidor

Cliente BD Java

JDBCAPI

nativa

Serv.nativo

BD

Protocolo nativo

Page 40: Java Base de Datos Jsp

40

Controlador Tipo 3

• Controlador JDBC-NET Java puro

Cliente

Servidor

Cliente BD Java

JDBC

Serv.nativo

BD

BD

Serv.JDBC

Serv.nativo

Serv.JDBC

Protocolo estándar

Protocolo estándar

Page 41: Java Base de Datos Jsp

41

Controlador Tipo 4

• Controlador Java puro y protocolo nativo

Cliente

Servidor

Cliente BD Java

JDBC

Serv.nativo

BD

Protocolo nativo

Page 42: Java Base de Datos Jsp

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().

Page 43: Java Base de Datos Jsp

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.

Page 44: Java Base de Datos Jsp

44

Código fuente de sentencias preparadas

PreparedStatement pstmt= con.prepareStatement( "INSERT INTO Autores VALUES (?,?,?,?)");

// Establece valores para cada uno de los parametrospstmt.setString(1,"Mario"); // Nombrepstmt.setString(2,"Vargas Llosa"); // Apellidospstmt.setString(3,"Peru"); // Lugar nacimientopstmt.setInt(4,1953); // Anio nacimientoint insCount= pstmt.executeUpdate();

// Establece valores para cada uno de los parametrospstmt.setString(1,"Nicholas"); // Nombrepstmt.setString(2,"Negroponte"); // Apellidospstmt.setString(3,"New York"); // Lugar nacimientopstmt.setInt(4,1953); // Anio nacimientoint insCount= pstmt.executeUpdate();

Page 45: Java Base de Datos Jsp

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.

Page 46: Java Base de Datos Jsp

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

Page 47: Java Base de Datos Jsp

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().

Page 48: Java Base de Datos Jsp

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).

Page 49: Java Base de Datos Jsp

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.

Page 50: Java Base de Datos Jsp

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().

Page 51: Java Base de Datos Jsp

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().

Page 52: Java Base de Datos Jsp

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.

Page 53: Java Base de Datos Jsp

53

Metadatos para SQL• Types simplemente contiene constantes con los tipos de datos.• DatabaseMetadata, proporciona información sobre la BD.

Object

DatabaseMetaData<<Interface>>

Types

Page 54: Java Base de Datos Jsp

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.

Page 55: Java Base de Datos Jsp

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 columnafor(int x =1;x<=columnCount;x++){ String columnName= rsmd.getColumnName(x); System.out.print(columnName +"\t");}...

Page 56: Java Base de Datos Jsp

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"); }}...

Page 57: Java Base de Datos Jsp

57

Utilización de transacciones

• Tratamiento conjunto de sentencias SQL.

• COMMIT y ROLLBACK

• Métodos para el tratamiento de transacciones:– commit(), roollback() y setAutoCommit().

Page 58: Java Base de Datos Jsp

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.

Page 59: Java Base de Datos Jsp

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).

Page 60: Java Base de Datos Jsp

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.

Page 61: Java Base de Datos Jsp

Acceso a base de datos desde Servlets y JSP

Page 62: Java Base de Datos 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.

Page 63: Java Base de Datos Jsp

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.

Page 64: Java Base de Datos Jsp

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.

Page 65: Java Base de Datos Jsp

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().

Page 66: Java Base de Datos Jsp

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.

Page 67: Java Base de Datos Jsp

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.

Page 68: Java Base de Datos Jsp

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.

Page 69: Java Base de Datos Jsp

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.

Page 70: Java Base de Datos Jsp

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

Page 71: Java Base de Datos 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.

Page 72: Java Base de Datos Jsp

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.

Page 73: Java Base de Datos Jsp

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.

Page 74: Java Base de Datos Jsp

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.

Page 75: Java Base de Datos Jsp

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.

Page 76: Java Base de Datos 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.

Page 77: Java Base de Datos Jsp

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.

Page 78: Java Base de Datos Jsp

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(); %>

Page 79: Java Base de Datos Jsp

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><% } %>