Menú Curso Java Web (JSP's/Servlets) : Código Fuente búsqueda en Base de Datos con JSP's

(Anterior) Búsqueda en Base de Datos a través de JSP's.

Código Fuente busqueda.jsp

Debido a la longitud del JSP, éste se encuentra dividido en seis secciones seguido de una descripción para cada fragmento.

<%@ page language="java" import="java.sql.*"%>
<%@ page import="java.util.*,com.osmosislatina.basesdedatos.*"%>


<%
	String buscar = request.getParameter("servicio");
	String orden = request.getParameter("orden");
        String ver_email = request.getParameter("email");
        String sql_busca = "select * from CURSOJSP_ENCUESTA";
	
	if (ver_email == null) { 
	  ver_email = "sincorreo";
       }
%>

  • En la parte inicial de esta página se importan las librerías ("packages") que serán utilizadas en el JSP; las librerías ("packages") java.sql representan aquellas utilizadas para interactuar con una Base de Datos, java.util contiene clases auxiliares para programas Java (como Hashtable) y las librerías ("packages") com.osmosislatina.basesdedatos contienen las Clases del "Pool" para Bases de Datos definido anteriormente.

  • Posteriormente se extraen los diversos valores de entrada del objeto request los cuales son asignados a sus respectivas variables, así como también es definida la primer secuencia de búsqueda para la Base de Datos: "select * from CURSOJSP_ENCUESTA".

<TABLE align=center border=3>
<TR> 
<TH>Nombre</TH> 
<TH>Ciudad</TH> 
<TH>Servicio</TH> 
<TH>Area </TH> 
 
<%
	if (ver_email.equals("si")) { 
%>
<TH> Email </TH>
 
<%
}
%>
</TR>

Esta sección del JSP contiene en su mayoría lenguaje HTML, sin embargo, nótese que existe una sección de código Java que representa una condicional. Esta condicional revisa el valor de la variable correo y en base al resultado obtenido, se agrega una columna adicional a la tabla HTML o se omite.

 
<%
	if (buscar.equals("a")) { 
	sql_busca += " where servicios = 1 ";
	} else if (buscar.equals("b")) {  
	sql_busca += " where servicios = 2 ";
        } else if (buscar.equals("c")) {  
	sql_busca += " where servicios = 3 ";
	} else { }

	if (orden.equals("a")) { 
	sql_busca += " order by servicios ,area";
	} else if (orden.equals("c")) {  
	sql_busca += " order by ciudad";
        } else if (orden.equals("n")) { 
	sql_busca += " order by apellido,nombre";
	} 

String[] ciudades = {"","Guadalajara","Mexico, D.F","Monterrey","Tijuana","Otra"};
String[] servicios = {"","Internet","Telefonía Celular","Internet y Telefonía Celular"};
String[] areas = {"","Residencial","Empresarial","Residencial y Empresarial"};

  • La parte anterior del JSP termina de definir la secuencia de búsqueda para la Base de Datos, esto es, a la secuencia inicial (sql_busca) le son agregados parámetros adicionales que permiten una búsqueda refinada basada en los parámetros proporcionados por el usuario.

  • Además son definidos tres arreglos del tipo String los cuales contienen nombres comunes, la generación de estos arreglos se debe a que los valores residentes en la Base de Datos se encuentran representados por dígitos o caracteres individuales, a través de estos arreglos podrán ser impresos resultados más descriptivos al usuario.

 
	Connection conn = null;
	try 
	{ 
	    conn = pool.extraerConexion();
	    Statement statement = conn.createStatement();
	    ResultSet results = statement.executeQuery(sql_busca);

	    while (results.next())
	   { 

            String nombreBus =  results.getString(2);
	    String apellidoBus = results.getString(3);
   	    String emailBus = results.getString(7);
	    int ciudadTmp = results.getInt(4);
	    int serviciosTmp = results.getInt(5);
	    int areaTmp = results.getInt(6);
	    String ciudadBus = ciudades[ciudadTmp];            
	    String servicioBus = servicios[serviciosTmp];
	    String areaBus = areas[areaTmp];


%>
<TR> <TD align=center><%=nombreBus%> <%=apellidoBus%></TD> <TD align=center><%=ciudadBus%></TD> <TD align=center><%=servicioBus%></TD> <TD align=center><%=areaBus%></TD>
 
<%
	if (ver_email.equals("si")) { 

%>
<TD align=center><%=emailBus%></TD>
 
<%

}

%>

</TR>
 
<%
	   }
            statement.close();
            results.close();
	} catch (Exception exc) { 
          System.out.println(exc);
       } finally  {	
	  // Liberar Conexion al Pool
          pool.liberarConexion(conn);	

   	} 
%>

La sección anterior representa la parte central del JSP ya que en ella se realiza la búsqueda en la Base de datos y se generan los resultados en lenguaje HTML; dichos pasos son descritos a continuación:

  • Primeramente es generado un objeto del tipo Connection el cual representará la conexión hacia la Base de Datos.

  • Se inicia un bloque try/catch/finally que incluirá el proceso de búsqueda en la Base de Datos.

  • Es invocado el método extraerConexion del Objeto pool, dicha función representa una conexión de "Pool" la cual es asignada a la referencia conn definida anteriormente. (NOTA: La creación del Objeto pool es llevado acabo al inicializarse el JSP mediante el método jspInit, esta función se describe posteriormente).

  • Es generado un Objeto del tipo Statement, a través del cual se define la secuencia de búsqueda para la Base de Datos; dicho Objeto es asociado con la conexión definida anteriormente.

  • Se genera un Objeto del tipo ResultSet que representará los resultados de nuestra búsqueda; el inicio de la búsqueda es iniciado por medio del método executeQuery perteneciente a la Clase Statement, nótese que dicho método toma como parámetro inicial sql_busca que representa nuestra secuencia de búsqueda SQL.

  • Una vez obtenidos los resultados de la búsqueda se inicia un ciclo while, su terminación depende del resultado del método next() perteneciente a la Clase ResultSet, este método retornará un resultado falso una vez que se haya terminado el juego de datos de búsqueda.

  • Mientras el ciclo anterior sea verdadero se inicia la extracción de datos en ResultSet (renglón por renglón) asociándose cada valor con sus respectivas variables.

  • Una vez definidas estas variables se genera un renglón en lenguaje HTML donde son colocados los valores de cada iteración a través de los elementos <%= %>.

  • Ya impresos todos los resultados de la búsqueda (terminado el ciclo while), se invoca el método close de la Clase Statement para indicar el cierre de la búsqueda.

  • Se define la sección catch del bloque, la cual será llamada en caso de ocurrir un error en la búsqueda.

  • Dentro de finally se manda llamar el método liberarConexion del Objeto pool. Al definir esta secuencia dentro de finally se garantiza que independientemente del resultado de la búsqueda (exitoso o erróneo) sea liberada cualquier tipo de conexión.(NOTA: El método liberarConexion forma parte del "Pool" de conexión hacia la Base de Datos).

</TABLE>

</UL>
<HR> 
<TABLE width="100%">
<TR><TD align="left"></td>
<TD align="right">
©2000-2003 Osmosis Latina
</TD>
</TR></TABLE>

</BODY>
</HTML>

 
<%!
   protected IConexionPool pool;

   public void jspInit() 
	{ 
	   try 
	 { 
	   Class.forName("com.mysql.jdbc.Driver");
	} catch (Exception exc) { System.out.println(exc); } 
	
	pool = new ConexionPoolBasico("jdbc:mysql://localhost:3306/osmosis","web","osmosis");
}

%> 

Esta última sección del JSP representa el cierre de contenido en HTML así como el método de inicialización jspInit. Mediante los elementos <!% %> utilizados para definir métodos/clases es declarado el método jspInit(), dicho método es invocado automáticamente al ser procesado el JSP , esto lo hace idóneo para extraer una conexión de un "Pool" para Base de Datos.

  • Primeramente se define la referencia pool para que esta sea accesible a todos los elementos del JSP.

  • Es definido un Bloque try/catch donde se revisa la existencia de la Clase com.mysql.jdbc.Driver, esta Clase es la que permite la conexión hacia una Base de Datos MySql, si esta Clase no se encuentra presente en el sistema (CLASSPATH) es generado un error.

  • Posteriormente se genera una instancia de la Clase principal del "Pool", la cual toma como parámetros la información necesaria para conectarse a la Base de Datos MySql.

Terminos Legales de Contenido ©2000-2011 Osmosis Latina

Diseñado bajo estándares : XHTML   CSS  

webmaster@osmosislatina.com