Consulta de Base de Datos desde JSP

De ChuWiki

Antes de nada, unas pequeñas aclaraciones.

Lo que se cuenta aquí no es muy elegante, puesto que se va a mezclar todo el código java dentro de la página .jsp. Siempre es mejor tener separadas las cosas y hacer una serie de clases java a las que llamaremos desde .jsp. Sin embargo, simplemente por ver que es posible, accederemos desde el .jsp a la base de datos metiendo todo el código java dentro de la página.

Suponemos también que tengo en el mismo ordenador en el que corre Tomcat, que sirve nuestra página .jsp, un servidor de base de datos MySQL corriendo. En este servidor hay una base de datos agenda, con una tabla contacto. Los campos de esta tabla son

mysql> describe contacto;
+-----------+-------------+------+-----+---------+----------------+
| Field     | Type        | Null | Key | Default | Extra          |
+-----------+-------------+------+-----+---------+----------------+
| id        | int(11)     | NO   | PRI | NULL    | auto_increment |
| nombre    | varchar(20) | YES  |     | NULL    |                |
| apellidos | varchar(20) | YES  |     | NULL    |                |
| telefono  | varchar(20) | YES  |     | NULL    |                |
+-----------+-------------+------+-----+---------+----------------+
4 rows in set (1.17 sec)

También hay que tener, en el directorio WEB-INF/lib el jar con el conector de base de datos. Para el ejemplo estoy usando MySQL, así que dentro de este directorio he metido el fichero mysql-connector-java-5.0.5.jar, que contiene el conector de java con MySQL.

La página jsp[editar]

La página jsp es bastante tonta -si se sabe algo de base de datos con java-. Simplemente establece conexión con la base de datos y muestra el contenido de la tabla contacto. La página jsp puede ser como esta

<!-- Los import -->
<%@ page language="java" %>
<%@ page import = "java.sql.Connection"%>
<%@ page import = "java.sql.DriverManager"%> 
<%@ page import = "java.sql.ResultSet"%> 
<%@ page import = "java.sql.Statement"%> 
<html>
<body>
<h1>Consulta a base de datos</h1>
<%
try
{
   // Conexion con bd
   Class.forName("org.gjt.mm.mysql.Driver");
   Connection conexion = DriverManager.getConnection("jdbc:mysql://localhost/agenda", "USUARIO_BD", "PASSWORD_BD");
   if (!conexion.isClosed())
   {
      // La consulta
      Statement st = conexion.createStatement();
      ResultSet rs = st.executeQuery("select * from contacto" );

      // Ponemos los resultados en un table de html
      out.println("<table border=\"1\"><tr><td>Id</td><td>Nombre</td><td>Apellido</td><td>Telefono</td></tr>");
      while (rs.next())
      {
         out.println("<tr>");
         out.println("<td>"+rs.getObject("id")+"</td>");
         out.println("<td>"+rs.getObject("nombre")+"</td>");
         out.println("<td>"+rs.getObject("apellidos")+"</td>");
         out.println("<td>"+rs.getObject("telefono")+"</td>");
         out.println("</tr>");
      }
      out.println("</table>");

      // cierre de la conexion
      conexion.close();
   }
   else
      // Error en la conexion
      out.println("fallo");
}
catch (Exception e)
{
   // Error en algun momento.
   out.println("Excepcion "+e);
   e.printStackTrace();
}
%>
</body>
</html>

Como hemos comentado, no es bonito meter tanto código java dentro de la página jsp. Vamos a ver el mismo ejemplo, pero realizando la consulta en una clase java separada, de forma que nuestra página jsp llama a esa clase.