Websphere con JSP. Recuperar datos del iSeries.

0 Flares Twitter 0 Facebook 0 LinkedIn 0 Google+ 0 0 Flares ×

En el anterior post os contaba como definir una conexión JDBC en nuestro servidor Websphere para poder recuperar datos de las tablas DB2 del iSeries. Hoy voy a contaros como explotar esa conexión y recuperar datos para nuestra Intranet con el lenguaje JSP.

Websphere-Db2W

Dentro de nuestro proyecto Web del servidor WebSphere creamos una página nueva donde vamos a recuperar los datos del iSeries y mostrarlos en una tabla. Esa es la parte fácil, partir de ahí ya podemos complicarnos todo lo que queramos.

Como es lógico, en  nuestro fichero JSP lo primero que tenemos que hacer es declarar los tipos de datos necesarios para la conexión

<%!
// Definimos variables de la Conexión
java.sql.Connection         conexionDB = null;
java.sql.PreparedStatement  pStmt = null;
String                      sql = null;
javax.naming.InitialContext ic = null;
javax.sql.DataSource        ds = null;
%>

Posteriormente procedemos a realizar la conexión con el iSeries con el siguiente código

// Conexion a la base de datos
try {
   ic = new javax.naming.InitialContext();
   ds = (javax.sql.DataSource) ic.lookup("jdbc/server");
   conexionDB = ds.getConnection();
}

catch (Exception e) {   // gestiona el error producido
   %>
   <DIV id="cabeceraerror">Error de Conexion</DIV>
   <DIV id="textoerror"><%=e.getMessage()%></DIV>
   <%
   conexionDB = null;
}

Para ello, dentro de un bloque try para controlar un posible error en la conexión, creamos un nuevo contexto ic y lo enganchamos con la conexión al iSeries que declaramos en la configuración del servidor, especificando el nombre que le dimos al Origen de datos, en este caso jdbc/server y luego abrimos la conexión con el getConnection. En caso de producirse un error lo contralaremos en el bloque Catch siguiente y en caso de que no se haya producido la conexión, la variable conexionDB tendrá el valor nulo, con lo cual para seguir con el proceso controlamos que el valor no lo sea.

Bien, en este momento ya estamos conectados al iSeries con el origen de datos y proveedor que definimos anteriormente. Ahora tenemos que recuperar los datos que nos hagan falta. Para ello definimos la variable sql que contiene la sentencia SQL que queremos realizar. Es un String normal y corriente, por lo que podemos complicarlo todo lo que queramos y condicionarlo a variables o parámetros para realizar sentencias condicionales.

sql = "select codigo, descripcion "+
"from articulos "+
"where baja <> '' " +
"order by codigo";

Después de definir la sentencia SQL que vamos a ejecutar, hay que decirle que la prepare y ejecute con las siguientes instrucciones

pStmt = conexionDB.prepareStatement(sql);
resultado = pStmt.executeQuery();

A partir de aquí, tendremos que ir leyendo los datos generados en la variable resultado con la propiedad next() y recuperando cada valor con las propiedades getString, getDouble, … dependiendo del dato que queramos recuperar.

Un bucle típico para realizar la consulta y mostrar todos los datos sería el siguiente código

while(resultado.next()) {
   %>
   <TR>
      <TD class="DatosInf"><%=resultado.getDouble(1)%></TD>
      <TD class="DatosInf"><%=resultado.getString(2)%></TD>
   </TR>
   <%
} // end while

Las propiedades que recuperan los datos  del resulSet llevan como parámetro el numero de columna que devuelve la sentencia SELECT. Una buena práctica para realizar un código mas claro es definir variables tipo byte cuyo valor corresponda a cada columna y así usaremos un nombre como parametro para reconocer fácilmente el resultado que estamos tratando. Por ejemplo, en el caso anterior

byte codigo = 1;
byte descripcion = 2;

while(resultado.next()) {
   %>
   <TR>
      <TD class="DatosInf"><%=resultado.getDouble(codigo)%></TD>
      <TD class="DatosInf"><%=resultado.getString(descripcion)%></TD>
   </TR>
   <%
} // end while

Por último, una vez finalizada la consulta debemos cerrar los cursores con las sentencias siguientes

resultado.close();
pStmt.close();

Este ejemplo daría como resultado una tabla HTML con todos los códigos y descripciones de mis artículos. Es una consulta muy simple, pero como ya he comentado, podemos complicarla como queramos para explotar al máximo nuestra base de datos DB2 y crear informes Web en nuestra Intranet.

JoBenCa

http://jobenca.es

Administrador y desarrollador de sistemas IBM System i y curioso de todo tipo de tecnología.

View more posts from this author

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

0 Flares Twitter 0 Facebook 0 LinkedIn 0 Google+ 0 0 Flares ×