SEPARAR CONEXIÓN A BBDD DE UN JSP

ruben_
16 de Julio del 2005

Hola a todos:
Tengo un JSP que es el siguiente y he intentado separar la conexión a BBDD de la presentación mediante un método en un Bean, pero no lo consigo.
¿Alguien me puede decir cómo conseguirlo o ponerme un ejemplo?. El JSP es el siguiente:

<HTML>
<HEAD>
<LINK rel='stylesheet' href='../recursos/css/estilo.css'>
</HEAD>
<BODY bgcolor='navy'>

<%@ page import="java.sql.Connection"%>
<%@ page import="java.sql.Statement"%>
<%@ page import="java.sql.ResultSet"%>
<%@ page import="java.sql.DriverManager"%>
<%@ page import="java.sql.SQLException"%>
<%@ page import="java.util.Vector"%>

<!-- Mediante los scriptlets (<% %>) introducimos código Java en el HTML -->
<%
// Declaramos la conexión, el objeto de consulta y la tabla de resultados e
// inicializamos dichas variables
Connection conexion = null;
Statement consulta = null;
ResultSet registros = null;

// Declaramos la ruta física donde se encuentra la base de datos

String NombreBase = "C:/Archivos de programa/Apache Software Foundation/Tomcat 5.0/webapps/agenda/BBDD/Base1.mdb";

// Declaramos la dirección (url) y el controlador (driver)
String url = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=" + NombreBase;
String driver = "sun.jdbc.odbc.JdbcOdbcDriver";

// Query de consulta de la tabla Agenda ordenada por apellidos
String consultaSQL = "SELECT * FROM Agenda ORDER BY Id";

// Con la condición de que pulsemos el botón del formulario, se
// ejecutará la consulta
if(request.getParameter("consultar") != null)
{
try
{
// Cargamos el controlador y realizamos la conexión con la base de datos
Class.forName(driver);
conexion = DriverManager.getConnection(url);

// Creamos un objeto de consulta
consulta =
conexion.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
}
catch(java.lang.ClassNotFoundException e)
{}
catch(SQLException e)
{}

try
{
// Creamos una tabla de resultados con los datos de la consulta
registros = consulta.executeQuery(consultaSQL);

// Construimos una tabla html donde alojar los resultados de la consulta
out.println("<CENTER><DIV>");
out.println("<TABLE border='10' bgcolor='orange' CellPadding='5' width='70%'>");
out.println("<TH bgcolor=yellow>Clave</TH>");
out.println("<TH bgcolor=green>Nombre</TH>");
out.println("<TH bgcolor=green>Apellidos</TH>");
out.println("<TH bgcolor=green>Teléfono</TH>");
out.println("<TH bgcolor=green>Móvil</TH></TR>");

// Realizamos el ciclo de lectura de los registros de la tabla
while(registros.next())
{
// Representamos en cada columna cada campo de la base de datos
out.println("<TR>");
out.println("<TD><CENTER><B>"+registros.getString(1) +"</B></CENTER></TD>");
out.println("<TD><B>"+registros.getString(2)+"</B></TD>");
out.println("<TD><B>"+registros.getString(3)+ " " +registros.getString(4)+"</B></TD>");
out.println("<TD><CENTER><B>" +registros.getString(5)+ "</B></CENTER></TD>");
out.println("<TD><CENTER><B>" +registros.getString(6)+ "</B></CENTER></TD>");
out.println("</TR>");
}

// Cerramos la tabla
out.println("</TABLE></CENTER></DIV>");

// Cerramos la tabla, la consulta y la conexión con la base de datos
registros.close();
consulta.close();
conexion.close();
}
catch(SQLException e)
{}
}
%>
</BODY>
</HTML>

Muchas gracias,
Rubén.

Mario Arias
16 de Julio del 2005
Podrias hacerlo con una clase independiente o mejor a un con Taglibs. No es una buena practica tener el codigo de conexión a la base de datos en la misma parte donde estas presentando los datos.

En una arquitectura de n-capas debes partir tu aplicación por lo menos en tres capas presentación(JSP y servlets), logica(clases planas,Taglibs,Session Bean) y acceso a datos(DAO,Entity Bean) esto permite que tu aplicación sea mas facil de mantener y de extender en un futuro