You are on page 1of 29

INSTITUTO TECNOLGICO DE OAXACA Base de Datos y Tecnologas Web

Interconexin de una BD a una aplicacin Web


Alumna: Pattzy Rosario Montero Garca

INTERCONEXIN DE UNA BD A UNA APLICACIN WEB

3-4-2013

1 REQUISITOS
Tener Instalado Netbeans IDE 7.3 versin Completa o Puede descargarlo de la siguiente url https://netbeans.org/downloads/index.html. Tener instalado Apache TomCat para la ejecucin de la aplicacin Web o Puede descargarlo de la siguiente url http://tomcat.apache.org/download-70.cgi. o Nota: En la instalacin de Netbeans tiene disponible la instalacin de TomCat Tener instalado Mysql 5.6. http://www.mysql.com/downloads/mirror.php?id=403015 Tener una BD en Mysql, para este ejemplo usaremos la dbAkihabara y la tabla de estudio, puede crearla con el siguiente cdigo:
delimiter $$ CREATE DATABASE `dbakihabara` /*!40100 DEFAULT CHARACTER SET latin1 */$$ CREATE TABLE `estudio` ( `idEstudio` int(11) NOT NULL AUTO_INCREMENT, `nombre` varchar(45) NOT NULL, PRIMARY KEY (`idEstudio`), UNIQUE KEY `idempresa_UNIQUE` (`idEstudio`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1$$

2 CREACIN DEL PROYECTO


1. Ejecute Netbeans 2. Cree un nuevo proyecto Web Application, para esto ubquese en la opcin [File] de la barra de mens 3. Busque ahora la opcin [New] y de clic, se abrir una ventana emergente.

INTERCONEXIN DE UNA BD A UNA APLICACIN WEB

3-4-2013

4. Seleccione la opcin [Java Web] y [Web Application] y de clic en [Next>] 5. Modifique ahora el nombre del proyecto a JSPServlets_DBEJ01 esto es opcional y la localizacin de la ubicacin donde se creara su proyecto. De clic en [Next>]

6. Es hora de selecciona el servidor en el que estar nuestra aplicacin. Si instalo Netbeans con Apache incluido le saldr como seleccin automtica, si no puede buscar su instalacin de apache TomCat con el botn de [Add] y seleccionar donde la instalo. Nota se le pedir el nombre de usuario y contrasea para poder acceder al servidor.

INTERCONEXIN DE UNA BD A UNA APLICACIN WEB

3-4-2013

7. En la selccion del frameworks, no seleccionaremos ninguno para este ejemplo. De clic en [Finish]

2.1 AGREGANDO EL CONTROLADOR MYSQL


1. Su proyecto se a creado, ahora de clic derecho donde dice el nombre de su proyecto y seleccione Properties de clic.

Se abrira una ventana emergente, como la siguiente.

INTERCONEXIN DE UNA BD A UNA APLICACIN WEB

3-4-2013

2. Ubiquese en la opcion de Libraries de la parte izquierda de la ventana en la seecion de [Categories] y de clic. 3. Ahora agregaremos el conector de mysql a la BD, de clic en [Add Library]

4. Busque ahora MySQL JDBC Driver, Seleccione y de clic en [Add Library]

Una vez de que le dio clic, se mostrara la librera agregada como este.

Con esta librera tenemos ahora la posibilidad de hacer conexiones a la BD de MySQL desde nuestro proyecto.

INTERCONEXIN DE UNA BD A UNA APLICACIN WEB

3-4-2013

2.2 CREANDO LA CLASE ENTIDAD


1. Ahora crearemos los paquetes donde se ubicaran las clases que crearemos con la ayuda del IDE, de clic derecho en su proyecto y luego ubiquese en [New]>[Java Package] y de clic.

2. En la ventana que le aparecera cambien el nombre del paquete por entidades.De clic

en [Finish]

INTERCONEXIN DE UNA BD A UNA APLICACIN WEB

3-4-2013

3. Ahora crearemos las clases entidades vinculadas a la BD, con ayuda de la persistencia. De clic derecho en un proyecto Seleccione [New] y de clic en [Entity Classes from Database]

4. Una vez abierta la ventana en la cuadro desplegable [Database Connetion:] Seleccione la opcin [New Database Connection].

16. Seleccione el tipo de Driver, seleccione MySQL (Connector/J driver) y de clic en [Next>]

INTERCONEXIN DE UNA BD A UNA APLICACIN WEB

3-4-2013

5. Ahora configure la conexin a la BD, para nuestra BD local el host sera localhost o igualmente 127.0.0.1 , el puerto por default es el 3306 pero MySQL lo tenemos configurado en el 3308 en nuestro caso. La base de datos a la que nos conectaremos es la que explicamos al principio del documento, a dbakihabara El usuario por default es root, la contrasea es la misma con la que accedemos a mysql. 6. De clic en [Test Connection] para comprobar la conexin a la BD sea exitosa.

INTERCONEXIN DE UNA BD A UNA APLICACIN WEB

3-4-2013

7. Seleccione ahora la tabla a la que desea crear una clase persistente. Ej: estudio Tome encuenta que para esto es necesario que la table tenga llave primaria si no solo puede existir como atributo de una clase de una tabla de entidad fuerte. De clic en [Next>]

8. Verifique que la clase Entity se cree en el paquete de entidades, de clic en [Next>]

INTERCONEXIN DE UNA BD A UNA APLICACIN WEB

3-4-2013

9.

De clic en [Finish]. Con esto ya tiene acceso a la Base de datos de DBAkihabara especificamente a la tabla Estudio.

Estas son los archivos que se les debio haber creado.

INTERCONEXIN DE UNA BD A UNA APLICACIN WEB

3-4-2013

Estudio.java Persistence.xml

El archivo persistence contiene los datos para realizar la conexin a la base de datos y que clases son entidades, por las cuales podra uste hacer persistencia de sus datos en la BD.

Puede ver el codigo generado de clase Estudio 2.2.1 Estudio Class


package entidades; import import import import import import import import import import import java.io.Serializable; javax.persistence.Basic; javax.persistence.Column; javax.persistence.Entity; javax.persistence.GeneratedValue; javax.persistence.GenerationType; javax.persistence.Id; javax.persistence.NamedQueries; javax.persistence.NamedQuery; javax.persistence.Table; javax.xml.bind.annotation.XmlRootElement;

INTERCONEXIN DE UNA BD A UNA APLICACIN WEB

3-4-2013

/** * * @author Kuro */ @Entity @Table(name = "estudio") @XmlRootElement @NamedQueries({ @NamedQuery(name = "Estudio.findAll", query = "SELECT e FROM Estudio e"), @NamedQuery(name = "Estudio.findByIdEstudio", query = "SELECT e FROM Estudio e WHERE e.idEstudio = :idEstudio"), @NamedQuery(name = "Estudio.findByNombre", query = "SELECT e FROM Estudio e WHERE e.nombre = :nombre")}) public class Estudio implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Basic(optional = false) @Column(name = "idEstudio") private Integer idEstudio; @Basic(optional = false) @Column(name = "nombre") private String nombre; public Estudio() { } public Estudio(Integer idEstudio) { this.idEstudio = idEstudio; } public Estudio(Integer idEstudio, String nombre) { this.idEstudio = idEstudio; this.nombre = nombre; } public Integer getIdEstudio() { return idEstudio; } public void setIdEstudio(Integer idEstudio) { this.idEstudio = idEstudio; } public String getNombre() { return nombre; } public void setNombre(String nombre) { this.nombre = nombre; }

INTERCONEXIN DE UNA BD A UNA APLICACIN WEB

3-4-2013

@Override public int hashCode() { int hash = 0; hash += (idEstudio != null ? idEstudio.hashCode() : 0); return hash; } @Override public boolean equals(Object object) { // TODO: Warning - this method won't work in the case the id fields are not set if (!(object instanceof Estudio)) { return false; } Estudio other = (Estudio) object; if ((this.idEstudio == null && other.idEstudio != null) || (this.idEstudio != null && !this.idEstudio.equals(other.idEstudio))) { return false; } return true; } @Override public String toString() { return "entidades.Estudio[ idEstudio=" + idEstudio + " ]"; } }

Esta es una clase Entidad, sirve para hacer persistencia en la base de datos

INTERCONEXIN DE UNA BD A UNA APLICACIN WEB

3-4-2013

2.2.2 EstudioJpaController 1. Ahora agregue un controlador para la clase entidad para esto, agregue un nuevo objeto de tipo JPAController

2. Seleccione la clase entidad, ej. Estudio. Si no aparece ninguna es que su clase entidad no fue creada correctamente. De clic en [Next >]

3. Seleccione el paquete en el que estar la clase controladora. De clic en [Finish]

INTERCONEXIN DE UNA BD A UNA APLICACIN WEB

3-4-2013

Puede ver cdigo generado, con esta clase puede usted crea, modificar, buscar, y eliminar registros por medio de la persistencia.
package controlador; import import import import import import import import import import controlador.exceptions.NonexistentEntityException; entidades.Estudio; java.io.Serializable; java.util.List; javax.persistence.EntityManager; javax.persistence.EntityManagerFactory; javax.persistence.Query; javax.persistence.EntityNotFoundException; javax.persistence.criteria.CriteriaQuery; javax.persistence.criteria.Root;

public class EstudioJpaController implements Serializable { public EstudioJpaController(EntityManagerFactory emf) { this.emf = emf; } private EntityManagerFactory emf = null; public EntityManager getEntityManager() { return emf.createEntityManager(); }

2.2.2.1

Creacin del Registro


public String create(Estudio estudio) { EntityManager em = null; try { em = getEntityManager(); em.getTransaction().begin();//Comienza la transaccion a la BD em.persist(estudio); em.getTransaction().commit();//Se vacia la transaccion a la BD } finally { if (em != null) { em.close();//Se cierra la conexion a la BD } return "Transaccion finalizada"; } }

2.2.2.2

Actualizacin del Registro


/** * Mtodo para Editar un registro de la base de datos * @param estudio * @throws NonexistentEntityException * @throws Exception

INTERCONEXIN DE UNA BD A UNA APLICACIN WEB

3-4-2013

*/ public String edit(Estudio estudio) throws NonexistentEntityException, Exception { EntityManager em = null; try { em = getEntityManager(); em.getTransaction().begin();//comenzando la transaccion estudio = em.merge(estudio);//Actualizando datos con el metodo merge em.getTransaction().commit(); } catch (Exception ex) { String msg = ex.getLocalizedMessage(); if (msg == null || msg.length() == 0) { Integer id = estudio.getIdEstudio(); if (findEstudio(id) == null) { throw new NonexistentEntityException("The estudio with id " + id + " no longer exists."); } } throw ex; } finally { if (em != null) { em.close(); } return "Transaccion finalizada"; } }

2.2.2.3

Eliminacin del Registro


/** * Metodo para eliminar registros de la BD de acuerdo a su llave primaria idEstudio * @param id * @throws NonexistentEntityException */ public String destroy(Integer id) throws NonexistentEntityException { EntityManager em = null; try { em = getEntityManager(); em.getTransaction().begin();//Comienza la tranasaccion Estudio estudio; try { estudio = em.getReference(Estudio.class, id);//Toma referencia del objeto de la clase estudio con el id de parametro estudio.getIdEstudio(); em.remove(estudio);//Removiendo el registro em.getTransaction().commit(); } catch (EntityNotFoundException enfe) {

la

INTERCONEXIN DE UNA BD A UNA APLICACIN WEB

3-4-2013

throw new NonexistentEntityException("The estudio with id " + id + " no longer exists.", enfe); } } finally { if (em != null) { em.close(); } return " - Finalizada la transaccion"; } }

public List<Estudio> findEstudioEntities() { return findEstudioEntities(true, -1, -1); } public List<Estudio> findEstudioEntities(int maxResults, int firstResult) { return findEstudioEntities(false, maxResults, firstResult); } private List<Estudio> findEstudioEntities(boolean all, int maxResults, int firstResult) { EntityManager em = getEntityManager(); try { CriteriaQuery cq = em.getCriteriaBuilder().createQuery(); cq.select(cq.from(Estudio.class)); Query q = em.createQuery(cq); if (!all) { q.setMaxResults(maxResults); q.setFirstResult(firstResult); } return q.getResultList(); } finally { em.close(); } } public Estudio findEstudio(Integer id) { EntityManager em = getEntityManager(); try { return em.find(Estudio.class, id); } finally { em.close(); } } public int getEstudioCount() { EntityManager em = getEntityManager(); try { CriteriaQuery cq = em.getCriteriaBuilder().createQuery();

INTERCONEXIN DE UNA BD A UNA APLICACIN WEB

3-4-2013

Root<Estudio> rt = cq.from(Estudio.class); cq.select(em.getCriteriaBuilder().count(rt)); Query q = em.createQuery(cq); return ((Long) q.getSingleResult()).intValue(); } finally { em.close(); } } }

2.2.3

Generador
/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package controlador; import import import import import import import import controlador.exceptions.NonexistentEntityException; entidades.Estudio; java.io.PrintWriter; java.util.List; javax.persistence.EntityManager; javax.persistence.EntityManagerFactory; javax.persistence.Persistence; static servlets.CrearEstudio.mostrarResult;

public class Generador { static final EntityManagerFactory emf=Persistence.createEntityManagerFactory("JSPServlets_DBEJ01PU");//Persisten ceUnitName es el nombre // de la configuracion con la que se crea la conexion a la BD //Es con el archivo que nos genero al crear la conexion a la BD, //en el archivo persistence.xml public static String crearSelect() { String html="<select name=\"idestudio\" id=\"idestudio\">"; EstudioJpaController con=new EstudioJpaController(emf); List<Estudio> list=con.findEstudioEntities(con.getEstudioCount(), 0); for(Estudio estudio:list) { html=html+"<option value=\""+estudio.getIdEstudio()+"\">"+estudio.getIdEstudio()+"\t"+estudio.get Nombre()+"</option>"; } html=html+"</select>"; return html; }

INTERCONEXIN DE UNA BD A UNA APLICACIN WEB

3-4-2013

2.3 SERVLETS
1. Ahora cree los Servlets que harn la funcines de creacin eliminacin y actualizacin de los registros para esto, de la misma forma que crea las clases y los paquetes, ahora cree un servlet. Busque [Servlet]

2. Cambie el nombre al servlet por CrearEstudio y el paquete cmbielo a servlets, si no creo el paquete escriba el nombre y este se creara junto con la clase. De clic en [Finish]

Cree los otros dos servlets. ActualizarEstudio y EliminarEstudio En total debe tener 3 archivos en el paquete servlets

INTERCONEXIN DE UNA BD A UNA APLICACIN WEB

3-4-2013

2.3.1 2.3.1.1

Crear doPost Una vez creado el servlet CrearEstudio busque el mtodo doPost y modifquelo con el siguiente cdigo.
/** * Handles the HTTP * <code>POST</code> method. * * @param request servlet request * @param response servlet response * @throws ServletException if a servlet-specific error occurs * @throws IOException if an I/O error occurs */ @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /*Creando un objeto de la Clase Estudio **/ Estudio estudio=new Estudio(); /**Comprobando que los parametros no esten vacios**/ if(request.getParameter("estudio").isEmpty()) errorNoData(response);//Si esta vacio llamamos el metodo errorNoData(); para que muestre msg de error else //si no { estudio.setNombre(request.getParameter("estudio")); /**Manejador de entidades que nos permitiran acceder a la BD**/ EntityManager em; EntityManagerFactory emf; emf=Persistence.createEntityManagerFactory("JSPServlets_DBEJ01PU");//Persisten ceUnitName es el nombre // de la configuracion con la que se crea la conexion a la BD

INTERCONEXIN DE UNA BD A UNA APLICACIN WEB

3-4-2013

//Es con el archivo que nos genero al crear la conexion a la BD, //en el archivo persistence.xml EstudioJpaController con=new EstudioJpaController(emf);//Creamos un objeto de tipo Controlador de estudio //Creamos el estudio al crear se esta persitiendo en la BD PrintWriter out = response.getWriter(); out.println("<p>"+con.create(estudio)+"</p>"); mostrarResult(out, con); } }

2.3.1.2 Mostrar Resultados Agregue Este mtodo ser necesario para realizar una consulta de los registros existentes, este mtodo lo utilizara tambin en las otras clases servlets.
/** * Metodo para mostrar los resultados de consulta de la BD * @param out * @param con */ public static void mostrarResult(PrintWriter out,EstudioJpaController con) { int nmax=10; int firts=0; List<Estudio> list=con.findEstudioEntities(nmax, firts);//Llamamos al metodo para buscar los //estudios en forma de lista donde podemos especificar el numero maximo de //resultados y desde que resultado puede comenzar a enviarnos (bloque) out.println("<p>Estudios</p>"); out.println("<table>" ); out.println("<tr>\n" + "<td>ID-Estudio</td>\n"); out.println("<td>Estudio</td>\n" + "</tr>"); for(Estudio es: list) { out.println("<tr>\n" + "<td>"+es.getIdEstudio()+"</td>\n"); out.println("<td>"+es.getNombre()+"</td>\n" + "</tr>"); } out.println( "</table>"); } @Override public String getServletInfo() { return "Short description";

INTERCONEXIN DE UNA BD A UNA APLICACIN WEB

3-4-2013

}// </editor-fold>

2.3.1.3 ErrorNoData Agregue el siguiente mtodo en los 3 servlets. Con este mtodo se imprime un mensaje de error, puede modificarlo a su gusto.
private void errorNoData(HttpServletResponse response) { PrintWriter out = null; try { out = response.getWriter(); out.println("<p>Error no hay datos que insertar</p>"); } catch (IOException ex) {

} finally { out.close(); } } }

2.3.2

Actualizar Una vez creado el servlet ActualizarEstudio busque el mtodo doPost y modifquelo con el siguiente cdigo.
protected void doPost(HttpServletRequest request, response) throws ServletException, IOException { try { /*Creando un objeto de la Clase Estudio **/ Estudio estudio=new Estudio(); /**Comprobando que los parametros no esten vacios**/ if(request.getParameter("idestudio").isEmpty() request.getParameter("estudio").isEmpty()) errorNoData(response);//Si esta vacio llamamos errorNoData(); para que muestre msg de error else //si no { try { HttpServletResponse

|| el metodo

estudio.setIdEstudio(Integer.parseInt(request.getParameter("idestudio"))); estudio.setNombre(request.getParameter("estudio")); /**Manejador de entidades que nos permitiran acceder a la BD**/ /// EntityManager em; EntityManagerFactory emf;

INTERCONEXIN DE UNA BD A UNA APLICACIN WEB

3-4-2013

emf=Persistence.createEntityManagerFactory("JSPServlets_DBEJ01PU");//Persisten ceUnitName es el nombre // de la configuracion con la que se crea la conexion a la BD //Es con el archivo que nos genero al crear la conexion a la BD, //en el archivo persistence.xml EstudioJpaController con=new EstudioJpaController(emf);//Creamos un objeto de tipo Controlador de estudio //Creamos el estudio al crear se esta persitiendo en la BD PrintWriter out = response.getWriter(); out.println("<p>"+con.edit(estudio)+"</p>"); mostrarResult(out, con); } catch(NumberFormatException ex) { errorNoData(response); } catch (NonexistentEntityException ex) { errorNoData(response); } catch (Exception ex) { errorNoData(response); } } } catch(java.lang.NullPointerException e) { errorNoData(response); }

2.3.3 Eliminar Una vez creado el servlet EliminarEstudio, modifique el mtodo post por el cual por medio de parmetros enviado por el formulario eliminaremos el registro con el id equivalente al parmetro.
@Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { /*Creando un objeto de la Clase Estudio **/ Estudio estudio=new Estudio(); /**Comprobando que los parametros no esten vacios**/ if(request.getParameter("idestudio").isEmpty() ) errorNoData(response);//Si esta vacio llamamos el metodo errorNoData(); para que muestre msg de error else //si no { try

INTERCONEXIN DE UNA BD A UNA APLICACIN WEB

3-4-2013

{ estudio.setIdEstudio(Integer.parseInt(request.getParameter("idestudio"))); /**Manejador de entidades que nos permitiran acceder a la BD**/ /// EntityManager em; EntityManagerFactory emf; emf=Persistence.createEntityManagerFactory("JSPServlets_DBEJ01PU");//Persisten ceUnitName es el nombre // de la configuracion con la que se crea la conexion a la BD //Es con el archivo que nos genero al crear la conexion a la BD, //en el archivo persistence.xml EstudioJpaController con=new EstudioJpaController(emf);//Creamos un objeto de tipo Controlador de estudio PrintWriter out = response.getWriter(); out.println("<p>"+con.destroy(estudio.getIdEstudio())+"</p>\n" );//Mandamos a llamar el metodo para que elimine el registro //de la BD mostrarResult(out, con); } catch(NumberFormatException ex) { errorNoData(response); } catch (NonexistentEntityException ex) { errorNoData(response); } catch (Exception ex) { errorNoData(response); } } } catch(java.lang.NullPointerException e) { errorNoData(response); } }

2.4 JSP
2.4.1 Crear 1. Cree las paginas JSP, Actualizar, Crear, Eliminar

Debe tener en total 3 archivos

INTERCONEXIN DE UNA BD A UNA APLICACIN WEB

3-4-2013

2. Modifique el cdigo por el siguiente 3. El servlet al que se comunicara ser el de CrearEstudio por el mtodo post
<%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title> </head> <body> <form id="form1" name="form1" method="post" action="../CrearEstudio"> <p> <label for="Estudio">Estudio</label> <input type="text" name="estudio" id="estudio" /> </p> <p> <input type="submit" name="btnInsertar" id="btnInsertar" value="Insertar" /> </p> </form> </body> </html>

Ejecute el archivo complelo con ctrl+mayus+f6, o con clic derecho y de clic en la opcin Run File

Una vez compilado puede verlo en su navegador.

INTERCONEXIN DE UNA BD A UNA APLICACIN WEB

3-4-2013

De clic en el botn crear. Resultado:

Base de datos:

2.4.2

Actualizar
<%--Imports de clases--%> <%@page import="controlador.Generador"%> <%@page import="servlets.CrearEstudio"%> <%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title> </head> <body>

INTERCONEXIN DE UNA BD A UNA APLICACIN WEB

3-4-2013

<form id="form1" name="form1" method="post" action="../ActualizarEstudio"> <p> <label>ID-Estudio:</label> <%--Llamando a metodo estico de la clase Generador--%> <% out.print(Generador.crearSelect()); %> </p> <p><label>Estudio:</label> <input type="text" value="" name="estudio" id="estudio"> </p> <p> <input type="submit" name="btnActualizar" id="btnEliminar" value="Actualizar" /> </p> </form> </body> </html>

Resultado:

Base de datos:

INTERCONEXIN DE UNA BD A UNA APLICACIN WEB

3-4-2013

2.4.3

Eliminar
<%--Imports de clases--%> <%@page import="controlador.Generador"%> <%@page import="servlets.CrearEstudio"%> <%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title> </head> <body> <form id="form1" name="form1" method="post" action="../EliminarEstudio"> <p> <label>ID-Estudio:</label> <%--Llamando a metodo estico de la clase Generador--%> <% out.print(Generador.crearSelect()); %> </p> <p> <input type="submit" name="btnEliminar" id="btnEliminar" value="Eliminar" /> </p> </form> </body> </html>

Resultado:

INTERCONEXIN DE UNA BD A UNA APLICACIN WEB

3-4-2013

Base de datos:

You might also like