You are on page 1of 17

Ingeniera de Software II

MSc. Daniel Alejandro Yucra Sotomayor Pag. - 1-


Laboratrio 3
JSP con Base de Datos
1. Creacin de un Mdulo de Gestin
Para desarrollar esta aplicacin es necesario crear una base de datos con al menos una tabla donde se
registre los datos.
El mdulo de gestin de personas por lo menos debe tener las siguientes funcionales:
Adicionar un registro
Modificar registros
Eliminar registros
Mostrar los registros
2. Creando la Base de Datos
Para realizar este laboratorio es importante primero correr los servicios Apache HTTPD httpd, el gestor
MYSQL Mysqld y debe haber descomprimido una versin de phpMyadmin en la carpeta
/var/www/html, con el nombre myamin.
a) Ingrese la siguiente direccin URL http://localhost/myadmin, debe mostrar la figura que se muestra a
continuacin:
Figura 01: Acceso a phpmyadmin, cliente gestor de base de datos MySql
Ingeniera de Software II
MSc. Daniel Alejandro Yucra Sotomayor Pag. - 2-
b) Para estos laboratorios se ha configurado las maquinas el servicio Mysql el usuario root y el
password uigv.
c) A continuacin, utilizando PhpMyadmin, crear la base de datos estudiante:
Figura 02: Creando la Base de Datos estudi ante
d) El cdigo SQL que debe generar es la muestra a continuacin:
--
-- Estructura de tabla para la tabla `persona`
--
CREATE TABLE IF NOT EXISTS `persona` (
`clave` mediumint(9) NOT NULL AUTO_INCREMENT,
`nombre` varchar(70) DEFAULT NULL,
`edad` int(11) DEFAULT NULL,
`estatura` int(11) DEFAULT NULL,
PRIMARY KEY (`clave`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
--
-- Volcado de datos para la tabla `persona`
--
INSERT INTO `persona` (`clave`, `nombre`, `edad`, `estatura`) VALUES
(1, 'Daniel Torres', 34, 110),
(3, 'Fabrizio Aguilar', 22, 180);
-- --------------------------------------------------------
--
-- Estructura de tabla para la tabla `usuarios`
--
CREATE TABLE IF NOT EXISTS `usuarios` (
`usuario` varchar(16) NOT NULL,
Ingeniera de Software II
MSc. Daniel Alejandro Yucra Sotomayor Pag. - 3-
`contrasena` varchar(16) NOT NULL,
PRIMARY KEY (`usuario`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
--
-- Volcado de datos para la tabla `usuarios`
--
INSERT INTO `usuarios` (`usuario`, `contrasena`) VALUES
('daniel', 'fedora14'),
('pedro', 'fedora14');
Solo debe copiar y ejecutar el cdigo en la opcin SQL.
Figura 03: Ejecutando el cdigo SQL en PhpMyAdmin
e) Adems debe haber creado las tablas persona y usuario, tal como se muestra en la figura
acontinuacin:
Figura 04: Verificando la creacin de las tablas persona y usuarios
Ingeniera de Software II
MSc. Daniel Alejandro Yucra Sotomayor Pag. - 4-
3. Proyecto Gestin de Estudiantes en Netbeans
Antes de crear los scripts para este sistema, vamos a crear el proyecto GestionEstudiantes
a) En Netbeans, elegir nuevo proyecto del tipo J ava Web, proyecto Web Applications
Figura 05: Seleccionando la Categor{ia Java Web y el tipo de Proyecto Web Application
b) El nombre de este proyecto ser: GestionEstudiantes
Figura 06: Asignando el nombre del proyecto GestionEstudiantes
c) A continuacin elegimos el servidor y la versin de J ava, para este caso GlassFish Server 3.1 y J ava
EE version: J ava EE 5, tal como se muestra a continuacin:
Ingeniera de Software II
MSc. Daniel Alejandro Yucra Sotomayor Pag. - 5-
Figura 07: Asignando el Server y una versi n de Java EE
No se olvide ah debe seleccionar el boton finish
A partir de este proyecto se va adicionar diferentes scripts J SP que tendrn diferentes funcionalidades
para el mdulo.
4. Lista de resultando en JSP
A continuacin vamos a adicionar el primer script J SP que listar los datos de la tabla persona.
a) En el proyecto GestionEstudiantes, crear un nuevo archivo J SP, con el nombre de
consultasimple, tal como se muestra en la figura de abajo:
Figura 07: Asignando el nombre para el script consultasimple
b) A continuacin copie el siguiente cdigo:
<!-- 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 la Tabla Persona</h1>
Ingeniera de Software II
MSc. Daniel Alejandro Yucra Sotomayor Pag. - 6-
<%
try
{
// Conexion con bd
Class.forName("org.gjt.mm.mysql.Driver");
Connection conexion =DriverManager.getConnection("jdbc:mysql://localhost/estudiante", "root", "uigv");
if (!conexion.isClosed())
{
// La consulta
Statement st =conexion.createStatement();
ResultSet rs =st.executeQuery("select * from persona" );
// Ponemos los resultados en un table de html
out.println("<table border=\"1\"><tr><td>Id</td><td>Nombre y
Apellido</td><td>Edad</td><td>Estatura</td></tr>");
while (rs.next())
{
out.println("<tr>");
out.println("<td>"+rs.getObject("clave")+"</td>");
out.println("<td>"+rs.getObject("nombre")+"</td>");
out.println("<td>"+rs.getObject("edad")+"</td>");
out.println("<td>"+rs.getObject("estatura")+"</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>
c) Para asegurar una conexin permanente entre el proyecto y la base de datos estudiante, debe crear
una unidad de persistencia.
d) A continuacin este es el resultado del listado de estudiantes
Ingeniera de Software II
MSc. Daniel Alejandro Yucra Sotomayor Pag. - 7-
Figura 08: Listado de registros de la tabl a persona
5. Una consulta con un evento
a) Para este ejemplo debe crear un nuevo archivo con el nombre consultaevento.jsp
Es importante tener en cuenta lo siguiente:
OBJETO CONNECTION:- Objeto que se utiliza para establecer la coneccin o enlaze entre el programa
jsp y la base de datos en mysql.
OBJETO RESULTSET:- Es la representacin en memoria de las tablas de la base de datos en disco, se
puede entender como una tabla virtual, recordar que generalmente todos los procesos que se realizen
con la tabla (insertar registros, eliminar registros, etc) se realizaran realmente contra un resulset y no
provocaran ningun cambio en la tabla fisica en disco, resulset tiene un conjunto de metodos muy utiles y
muy usados para el proceso de los renglones de la tabla virtual.
OBJETO STATEMENT:- Este objeto y sus dos metodos executequery(solo para select de sql) y
executeupdate( solo para insert, update y delete de sql) son los metodos que se utilizaran para
comunicarse con la tabla fisica en disco.
Para nuestro caso definiremos de la siguiente manera de la siguiente manera:
// declarando y creando objetos globales
Connection canal = null;
ResultSet tabla= null;
Statement instruccion=null;
String strcon = "jdbc:mysql://localhost/estudiante?user=root&password=uigv";
// abriendo canal o enlace en su propio try-catch
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
canal=DriverManager.getConnection(strcon);
instruccion = canal.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
} catch(java.lang.ClassNotFoundException e){} catch(SQLException e) {};
b) A continuacin copiar el siguiente cdigo para este ejemplo:
Ingeniera de Software II
MSc. Daniel Alejandro Yucra Sotomayor Pag. - 8-
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Consulta Evento</title>
</head>
<body>
<%@ page import="java.io.*,java.util.*,java.net.*,java.sql.*" %>
<%
// declarando y creando objetos globales
Connection canal =null;
ResultSet tabla=null;
Statement instruccion=null;
String strcon ="jdbc:mysql://localhost/estudiante?user=root&password=uigv";
if(request.getParameter("OK") !=null)
{
// abriendo canal o enlace en su propio try-catch
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
canal=DriverManager.getConnection(strcon);
instruccion =canal.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
}catch(java.lang.ClassNotFoundException e){}catch(SQLException e) {};
//leyendo tabla en disco y pasandola al resultset
try {tabla =instruccion.executeQuery("select * from persona");
// mandando resultset a una tabla html
out.println("<H3>Consulta de la Tabla Persona</H3>");
out.println("<TABLE Border=10 CellPadding=5><TR>");
out.println("<TH bgcolor=#525666><FONT COLOR=WHITE>CDIGO<font></TH><TH bgcolor=#525666><FONT
COLOR=WHITE>NOMBRE Y APELLIDO</FONT></TH><TH bgcolor=#525666><FONT
COLOR=WHITE>EDAD</FONT></TH><TH bgcolor=#525666><FONT COLOR=WHITE>ESTATURA</FONT></TH</TR>");
// ciclo de lectura del resultset
while(tabla.next()) {
out.println("<TR>");
out.println("<TD>"+tabla.getString(1)+"</TD>");
out.println("<TD>"+tabla.getString(2)+"</TD>");
out.println("<TD>"+tabla.getString(3)+"</TD>");
out.println("<TD>"+tabla.getString(4)+"</TD>");
out.println("</TR>"); }; // fin while
out.println("</TABLE></CENTER></DIV></HTML>");
// cerrando resultset
tabla.close(); instruccion.close();canal.close();}//fin try no usar ; al final de dos o mas catchs
catch(SQLException e) {};
};
//construyendo forma dinamica
out.println("<FORM ACTION=consultaevento.jsp METHOD=post>");
out.println("<INPUT TYPE=SUBMIT NAME=OK VALUE=CONSULTA><BR>");
out.println("</FORM>");
%>
</body>
</html>
c) El procedimiento que de la construccin del script fue el siguiente:
- Crear una conexin o enlace a la base de datos.
Ingeniera de Software II
MSc. Daniel Alejandro Yucra Sotomayor Pag. - 9-
- Abrir la conexin a la base de datos.
- Crear el enlace y cargarlo con la instruccin sql
- Crear el RESULTSET y cargarlo
- Cargar un objeto table de html con el RESULTSET
- Procesar el table de html
- Cerrar resultset, statement, driver y la conexin
- En caso de que salga error verifique que haya creado la unidad de persistencia para este proyecto, en
todo caso tiene que crear la unidad de persistencia.
Figura 09: Integrando la Base de Datos con el proyecto en Netbeans
d) Para este ejemplo el nombre de la unidad de persistencia ser: GestionEstudiantePU (es un archivo
xml que se guardar en la carpeta Configuration Files del proyecto).
Figura 10: Generando la unidad de persistencia
Ingeniera de Software II
MSc. Daniel Alejandro Yucra Sotomayor Pag. - 10-
d) Finalmente el resultado de la ejecucin de este script deber mostrar como aparece en la figura:
Figura 11: Ejecutando el script consultaevento.jsp
Figura 12: Mostrando resultados de la tabl a Persona
6. Adicin de Registros en la tabla persona
a) Para crear el script que permita adicionar nuevos registros debe crear el archivo adicion.jsp,
Basicamente se destaca la siguiente instruccin sql:
INSERT INTO TABLA(CAMPO1,CAMPO2..) VALUES(VALOR1,VALOR2..);
Ingeniera de Software II
MSc. Daniel Alejandro Yucra Sotomayor Pag. - 11-
Para este caso se crea la string "q" con el formato apropiado sql (query).
Es importante destacar que existen dos mtodos para el objeto Statement
- STATEMENT.EXECUTEQUERY() =Se debera usarlo para la instruccin SQL SELECT
- STATEMENT.EXECUTEUPDATE()=Se debera usarlo para la instruccin SQL INSERT, UPDATE,
DELETE. etc.
b) A continuacin copiar el siguiente cdigo:
<%@ page import="java.io.*,java.util.*,java.net.*,java.sql.*" %>
<%
if(request.getParameter("GRABAR") !=null)
{
// objetos de enlace
Connection canal =null;
ResultSet tabla=null;
Statement instruccion=null;
String strcon ="jdbc:mysql://localhost/estudiante?user=root&password=uigv";
// abriendo canal o enlace en su propio try-catch
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
canal=DriverManager.getConnection(strcon);
instruccion =canal.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
}catch(java.lang.ClassNotFoundException e){}catch(SQLException e) {};
//cargando los campos a grabar
// excepto clave porque en mysql es de tipo auto-increment
String nombre =request.getParameter("NOMBRE");
int edad =Integer.parseInt(request.getParameter("EDAD"));
int estatura =Integer.parseInt(request.getParameter("ESTATURA"));
// insert into tabla(nombre,edad,estatura) values('juan', 15, 188);
String q="insert into persona(nombre,edad,estatura) values(\"" +nombre+"\","+edad+","+estatura+"); ";
try {
// agregando renglon (insert)
int n=instruccion.executeUpdate(q);
//avisando que se hizo la instruccion
out.println("REGISTRO INSERTADO");
}catch(SQLException e) {out.println(e);};
try{
// tabla.close();
instruccion.close();
canal.close();
}catch(SQLException e) {out.println(e);};
};
// construyendo forma dinamica
out.println("<FORM ACTION=adicion.jsp METHOD=post>");
out.println("NOMBRE :<INPUT TYPE=TEXT NAME=NOMBRE><BR>");
out.println("EDAD :<INPUT TYPE=TEXT NAME=EDAD><BR>");
out.println("ESTATURA:<INPUT TYPE=TEXT NAME=ESTATURA><BR>");
out.println("<INPUT TYPE=SUBMIT NAME=GRABAR VALUE=INSERTAR ><BR>");
out.println("</FORM>");
%>
Ingeniera de Software II
MSc. Daniel Alejandro Yucra Sotomayor Pag. - 12-
c) El resultado de la presentacin se muestra a continuacin
Figura 13: Adicionando un nuevo registro
Figura 14: Confirmando registro
d) A continuacin debe verificar, utilizando el archivo consultasimple.jsp o consultaevento.jsp
Figura 15: Verificando el nuevo registro ingresado
Ingeniera de Software II
MSc. Daniel Alejandro Yucra Sotomayor Pag. - 13-
7. Modificar Registros
a) Para crear el script que permita modificar registros adicionados debe crear el archivo modifica.jsp,
Editar significa cambiar el contenido de algunos de los campos por nueva informacn o corregir algun
error de captura original.
En este caso se utiliza la instruccin sql UPDATE, sin embargo ahora se tendran que construir dos
mtodos uno de busqueda de algn registro y otro de actualizacion estos metodos son:
- BUSQUEDA: programa normal de busqueda por clave, pero ahora debera construir una formulario
html dinamica, que contendra un form action apuntando o ejecutandose a si mismo es decir modifica.jsp,
ademas tendra todos los "input text" cajas de texto necesarios para cargar cada celda del renglon de
busqueda.
- EDICION: recoje los datos ya modificados del formulario html dinamica y realiza directamente cambios
utilizando el comando sql update en la base de datos.
b) A continuacin copiar el siguiente cdigo:
<%@ page import="java.io.*, java.util.*, java.net.*, java.sql.*" %>
<%! int clave=0; %>
<%
// codigo del evento BUSQUEDA y recordar construir una nueva forma dinamica
if(request.getParameter("BUSCAR") !=null)
{
Connection canal =null;
ResultSet tabla=null;
Statement instruccion=null;
String strcon ="jdbc:mysql://localhost/estudiante?user=root&password=uigv";
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
canal=DriverManager.getConnection(strcon);
instruccion =canal.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
}catch(java.lang.ClassNotFoundException e){}catch(SQLException e) {};
clave =Integer.parseInt(request.getParameter("CLAVEB"));
String q="select * from persona where clave="+clave;
try {tabla =instruccion.executeQuery(q);
tabla.next();
out.println("<FORM ACTION=modifica.jsp METHOD=POST>");
out.println("NOMBRE:<INPUT TYPE=TEXT NAME=NOMBRE VALUE="+tabla.getString(2)+"><BR>");
out.println("EDAD:<INPUT TYPE=TEXT NAME=EDAD VALUE="+tabla.getString(3)+"><BR>");
out.println("ESTATURA:<INPUT TYPE=TEXT NAME=ESTATURA VALUE="+tabla.getString(4)+"><BR>");
out.println("<INPUT TYPE=SUBMIT NAME=EDITAR VALUE=EDITAR><BR>");
tabla.close();instruccion.close();canal.close();
}catch(SQLException e) {}catch(Exception ex){};
}; // fin evento buscar
// codigo de evento EDICION
String temp2=request.getParameter("EDITAR");
if(temp2==null)temp2=" ";
if(temp2.compareTo("EDITAR")==0)
Ingeniera de Software II
MSc. Daniel Alejandro Yucra Sotomayor Pag. - 14-
{
String nombre,q ;
int edad; float estatura;
Connection canal =null;
ResultSet tabla=null;
Statement instruccion=null;
String strcon ="jdbc:mysql://localhost/estudiante?user=root&password=uigv";
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
canal=DriverManager.getConnection(strcon);
instruccion =canal.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
}catch(java.lang.ClassNotFoundException e){}catch(SQLException e) {};
try {
tabla =instruccion.executeQuery("select * from persona");
}catch(SQLException e) {};
nombre =request.getParameter("NOMBRE");
edad =Integer.parseInt(request.getParameter("EDAD"));
estatura =Integer.parseInt(request.getParameter("ESTATURA"));
q ="UPDATE persona SET "+"NOMBRE='"+nombre+"', EDAD="+edad+",estatura="+estatura+" WHERE clave=" +clave+";";
try{instruccion.executeUpdate(q); }catch(SQLException e) {};
try {tabla.close();instruccion.close();canal.close();}catch(SQLException e) {};
out.println("REGISTRO EDITADO");
}; // fin evento editar
// construyendo forma dinamica
out.println("<FORM ACTION=modifica.jsp METHOD=post>");
out.println("CLAVE EDITAR:<INPUT TYPE=TEXT NAME=CLAVEB><BR>");
out.println("<INPUT TYPE=SUBMIT NAME=BUSCAR VALUE=BUSCAR ><BR>");
out.println("</FORM>");
%>
c) El resultado de la presentacin se muestra a continuacin
Ingeniera de Software II
MSc. Daniel Alejandro Yucra Sotomayor Pag. - 15-
Figura 16: Ingresando cdigo de bsqueda de registro
Figura 17: Modificando Datos de un registro
Figura 18: Resultado de la confirmacin del registro editado
Ingeniera de Software II
MSc. Daniel Alejandro Yucra Sotomayor Pag. - 16-
7. Eliminar Registro
a) Para crear el script que permita eliminar registros debe crear el archivo eliminar.jsp,
Para este ejemplo para eliminar se debe buscar el registro, el modelo que estamos usando es la
instruccin SQL DELETE (DELETE FROM TABLA WHERE CONDICION) y el resultado utilizando
RESULTSET.EXECUTEUPDATE()
b) A continuacin copiar el siguiente cdigo:
<%@ page import="java.io.*,java.util.*,java.net.*,java.sql.*" %>
<%
// declarando y creando objetos globales
Connection canal =null;
ResultSet tabla=null;
Statement instruccion=null;
String strcon ="jdbc:mysql://localhost/estudiante?user=root&password=uigv";
if(request.getParameter("OK") !=null)
{
// abriendo canal o enlace en su propio try-catch
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
canal=DriverManager.getConnection(strcon);
instruccion =canal.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
}catch(java.lang.ClassNotFoundException e){}catch(SQLException e) {};
// preparando condicion de eliminacion
int clave =Integer.parseInt(request.getParameter("CLAVEB"));
// construyendo select con condicion eliminacion SQL DELETE
String q="delete from persona where clave ="+clave;
// mandando SQL a tabla en disco
try {instruccion.executeUpdate(q);
// avisando
out.println("registro eliminado");
}//fin try no usar ; al final de dos o mas catchs
catch(SQLException e) {}
catch(java.lang.NullPointerException e){};
try {
// no ocupa cerrar tabla(), no se leyo (select) un resultset
// la eliminacion fue directa en disco
instruccion.close();canal.close();}catch(SQLException e) {};
};
// construyendo forma dinamica
out.println("<FORM ACTION=eliminar.jsp METHOD=post>");
out.println("CLAVE ELIMINAR:<INPUT TYPE=TEXT NAME=CLAVEB><BR>");
out.println("<INPUT TYPE=SUBMIT NAME=OK VALUE=ELIMINAR><BR>");
out.println("</FORM>");
%>
Ingeniera de Software II
MSc. Daniel Alejandro Yucra Sotomayor Pag. - 17-
c) Este es el resultado que debe mostrar a continuacin:
Figura 19: Busca un registro
Figura 20: Confirmacin de la eli minacin
FACULTAD DE INGENIERA DE COMPUTO Y SISTEMAS
Docente: MSc. Daniel Al ejandro Yucra Sotomayor
Lima, Agosto, del 2011
Consultas: dyucra@gmail.com

You might also like