enero 05, 2014

Accediendo a MySQL con JSP

Hay que tomar en cuenta para este ejercicio dos cosas:
  1. Básicamente es lo mismo que usar una conexión de escritorio con Java (JSP está pensado en el uso de redes, particularmente hablamos de páginas Web).
  2. Deberíamos separar la parte de código Java del código HTML (en otro ejercicio usaremos los beans)
En este ejercicio uso el IDE de Netbeans 7.4 (aquí datos sobre la instalación).

LA BASE DE DATOS

Para no complicarnos más de lo necesario usaremos el script de la BD dbnegocio que incluye la tabla clientes con 6 registros:
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";CREATE DATABASE `dbnegocio` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
USE `dbnegocio`;
CREATE TABLE `clientes` (
  `cod_clie` int(11) NOT NULL auto_increment,
  `nom_clie` varchar(25) NOT NULL,
  `ruc_clie` varchar(11) NOT NULL,
  `dir_clie` varchar(100) NOT NULL,
  PRIMARY KEY  (`cod_clie`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ;
INSERT INTO `clientes` VALUES (1, 'Luis Miguel', '10258945101', 'Av. Miami 990');
INSERT INTO `clientes` VALUES (2, 'Freddy Albarracín', '10451278361', 'Av. Arenales 789');
INSERT INTO `clientes` VALUES (3, 'Juan Godoy', '14784598652', 'Calle Las Magnolias s/n');
INSERT INTO `clientes` VALUES (4, 'Betel García', '20142536784', 'Los Frejoles 478');
INSERT INTO `clientes` VALUES (5, 'Luisa Pérez', '20144778666', 'Urb. Los Pecanos J-5');
INSERT INTO `clientes` VALUES (6, 'Dina Meza', '20141512178', 'Los Naranjos 357');


Sobre phpMyAdmin en este otro post. Una vez hallamos ingresado a phpMyAdmin busque arriba a la derecha la opción “SQL”:
Captura_de_pantalla_010514_092832_AM
Ahora pegamos el script en el área de texto, clic en “Continuar”:
Captura_de_pantalla_010514_093148_AM
Ahora tenemos la BD en la columna a la izquierda, o podría ser que necesite actualizar la página para verla, otra opción es ir al enlace “Bases de datos” y allí la hallaremos:
Captura_de_pantalla_010514_093620_AM
Los datos de la tabla “clientes”:
Captura_de_pantalla_010514_114001_AM

EL PROYECTO WEB

Ahora vamos al IDE de Netbeans, en el menú archivo (File) y generamos un nuevo proyecto (New project…), seleccionamos la categoría “Java Web”, proyecto “Web Application”, siguiente (Next):
Captura_de_pantalla_010514_094033_AM
Ahora indicamos el nombre para el proyecto (Project Name, no use espacios y evite los caracteres especiales), lo he  nombrado 'DatosMysql', las otras opciones para decidir en donde guardar el proyecto los dejaré con las opciones por defecto, clic en siguiente (Next):
Captura_de_pantalla_010514_094238_AM
Ahora cambiaré el servidor a usar, selecciono en el desplegable Apache Tomcat, en ocasiones tuve problemas con GlassFish Server (si no tiene Apache Tomcat en su lista revise el proceso de instalación que describo en este post), clic en finalizar (Finish):
Captura_de_pantalla_010514_095034_AM
Estamos omitiendo el siguiente paso (Next) debido a que no seleccionaremos Framework alguno en este ejercicio. Tras unos segundos tendremos a la vista la página “index.jsp” en donde empezaremos con el lenguaje Java incrustado entre las etiquetas HTML (estos bloques así incrustados reciben el nombre de scriplets).
Habitualmente en este punto, cuando estamos en clases, solicito a los alumnos ejecuten el proyecto (F6) para verificar la carga de index.jsp con el clásico “Hello World!”, esto con el fin de corregir problemas antes de continuar (habitualmente el problema va con GlassFish).
Captura_de_pantalla_010514_125225_PM

LA PÁGINA JSP

Seguimos trabajando en el IDE de NetBeans. Los siguientes pasos no deben seguirse obligatoriamente en el mismo orden, pero, tratando de mantener una lógica didáctica lo presento en el orden que me parece más sencillo de entender.
LA LIBRERÍA PARA MySQL
Es en realidad el paquete que nos permitirá usar el Driver para conectar nuestra aplicación Web con MySQL, a la izquierda busca en el panel “Project” la carpeta “Libraries” (quizá tengas que desplegar las carpetas), sobre esta das con el botón derecho, clic en la opción “Add Library…”:
Captura_sin_título_010514_125838_PM
En la siguiente ventana busca y selecciona “MySQL JDBC Driver”, clic en el botón “Add Library”:
Captura_de_pantalla_010514_010301_PM
Lo que indico a continuación es solamente para aclarar el propósito de agregar la librería, esta contiene a un paquete llamado “com.mysql.jdbc” que contiene la definición de la clase “Driver” que usaremos a continuación (como dato curioso, el paquete “org.gjt.mm.mysql” también contiene la clase “Driver”).
Captura_de_pantalla_010514_011124_PM
EL SCRIPT JAVA
Incrustemoa ahora el script Java dentro de index.jsp, primero importamos el paquete “java.sql” que contiene las clases: Connection, Statement, ResulSet, DriverManager entre otros, así que busque la directiva @page y le agregamos ‘import=”java.sql.*’, quedando de esta forma:
<%@page contentType="text/html" pageEncoding="UTF-8" import="java.sql.*"%>
LAS VARIABLES
Aunque esto podríamos solucionar de otra manera, lo mejor será que usemos variables para guardar datos que necesitaremos durante la ejecución, tales como el nombre de la tabla, servidor de BD, nombre de usuario, contraseña, etc.
Todo el código que va a continuación va entre las etiquetas "<%" al inicio y "%>" al finalizar:
String servidor = "localhost";
String usuario = "root";
String password = "";
String bd = "dbnegocio";
String url = "jdbc:mysql://" + servidor + "/" + bd;
También necesitaremos algunos objetos de la clase ‘java.sql’:
Connection con = null;
Statement st = null;
ResultSet rs = null;
Importante prestar atención a las mayúsculas y minúsculas, la mayoría de las veces por allí está el problema.
LA CONEXIÓN
Implementamos una nueva instancia de la clase Driver que está en el paquete ‘com.mysql.jdbc.Driver’ y obtenemos la conexión pasándole la dirección URL (en la variable ‘url’) del servidor, nombre de usuario de la BD y su contraseña:
Class.forName("com.mysql.jdbc.Driver").newInstance();
con = DriverManager.getConnection(url, usuario, password);
RECUPERANDO DATOS
Para recuperar los datos de la tabla ‘clientes’ preparamos una sentencia (en el Statement st) SQL y la ejecutamos (executeQuery):
st = con.createStatement();
rs = st.executeQuery("SELECT * FROM clientes");
MOSTRANDO LOS DATOS
Hasta aquí ya tenemos los datos de la tabla ‘clientes’ almacenados en ‘rs’, usaremos su método ‘next()’ para recuperar uno a uno sus registros (filas) e implementamos dentro de un bucle (while) para hacer esto en cada fila.
Para escribir los datos que vamos recuperando en la página:
while (rs.next()) {
   out.print(rs.getInt("cod_clie") + " – ");
   out.print(rs.getString("nom_clie") + " – ");
   out.print(rs.getString("ruc_clie") + " – ");
   out.print(rs.getString("dir_clie") + "<br / >");
}
Y cerramos la conexión con
rs.close();
El código completo de index.jsp sería:
Captura_sin_título_010514_015732_PM
Por supuesto que deberíamos usar try/catch para el control de excepciones, pero, con esto cumplimos el propósito del presente post, al cargar la página (F6) tengo la siguiente vista:
Captura_de_pantalla_010514_020230_PM
Risa Espero les sea útil y trataré de contestar cuanto antes sus preguntas.


No hay comentarios.:

Publicar un comentario

Tu comentario