Java - Aplicación W
Java - Aplicación W
eb, Carrito de Compras Parte
eb, Carrito de Compras Parte
I - C
I - C
reación de la Base de
reación de la Base de
Datos
Datos
1. Entorno
1. Entorno
•
• MySQL 5.1.MySQL 5.1. •
• NetBeans IDE 6.9.1 NetBeans IDE 6.9.1 •
• Apache TomcatApache Tomcat •
• JDK 1.6.0 - 21JDK 1.6.0 - 21
2. Introducción
2. Introducción
En el siguiente tutorial vamos a desarrollar un
En el siguiente tutorial vamos a desarrollar un carrito de compras o lo que carrito de compras o lo que seria un sistema de ventasseria un sistema de ventas usando el lenguaje de
usando el lenguaje de programación Java, como base programación Java, como base de datos vamos a usar el de datos vamos a usar el MySQL 5.1. y tambienMySQL 5.1. y tambien crearemos un reporte con JasperReports. La base de datos que vamos a crear es una base de datos con crearemos un reporte con JasperReports. La base de datos que vamos a crear es una base de datos con fines didácticos, dado que nos faltaría crear mas tablas, como la tabla cliente, categoría, unidad de fines didácticos, dado que nos faltaría crear mas tablas, como la tabla cliente, categoría, unidad de medida, etc pero si nos exp
medida, etc pero si nos explayamos mucho nos quedaría muy largo el tutorial. Ademas en el ejemplolayamos mucho nos quedaría muy largo el tutorial. Ademas en el ejemplo no se explica como d
no se explica como disminuir un stock, debido a que isminuir un stock, debido a que eso siempre se les pide a los alumnos eso siempre se les pide a los alumnos universitariouniversitario que investiguen como hacerlo,
que investiguen como hacerlo, pero si quieren una ayudita lo ppero si quieren una ayudita lo pueden hacer creando Triggers en la baseueden hacer creando Triggers en la base de datos. La aplicación se desarrollara en un formato web usando el patrón de
de datos. La aplicación se desarrollara en un formato web usando el patrón de Modelo, Vista yModelo, Vista y
Controlador
Controlador . Y para la parte de la vista usaremos lo que se . Y para la parte de la vista usaremos lo que se conoce comoconoce como Java Server Page (JSP)Java Server Page (JSP).. Espero que el ejemplo se de su utilidad.
Espero que el ejemplo se de su utilidad.
3. Desarrollo
3. Desarrollo
En esta primera parte del tutorial vamos a
En esta primera parte del tutorial vamos a crear la base de datos crear la base de datos en MySQL 5.1., la base de datos seen MySQL 5.1., la base de datos se llamara
llamara BDTutorialBDTutorial
3.1. Diseño de la base de datos 3.1. Diseño de la base de datos La base
A continuación les paso el script de creación de la base de datos A continuación les paso el script de creación de la base de datos -- CREADO POR: HENRY JOE WONG URQUIZA
-- CREADO POR: HENRY JOE WONG URQUIZA
-- FECHA: 24FEB2011
-- FECHA: 24FEB2011
--
--
--- TUTORIAL DE COMO HACER UN CARRITO DE COMPRAS USANDO
-- TUTORIAL DE COMO HACER UN CARRITO DE COMPRAS USANDO
-- EL MODELO VISTA CONTROLADOR
-- EL MODELO VISTA CONTROLADOR
---- Creando la base de datos
-- Creando la base de datos
--CREATE
CREATE DATABASEDATABASE IFIF NOTNOT EXISTSEXISTS bdtutorial;bdtutorial; USE
USE bdtutorial;bdtutorial;
---- Creando la tabla `detalleventa`
-- Creando la tabla `detalleventa`
--DROP
DROP TABLETABLE IFIF EXISTSEXISTS `detalleventa`;`detalleventa`; CREATE
CREATE TABLETABLE `detalleventa` (`detalleventa` ( `codigoVenta`
`codigoVenta` intint(11)(11) NOTNOT NULLNULL,, `codigoProducto`
`codigoProducto` intint(11)(11) NOTNOT NULLNULL,, `cantidad`
`cantidad` decimaldecimal(18,2)(18,2) NOTNOT NULLNULL,, `descuento`
`descuento` decimaldecimal(18,2)(18,2) NOTNOT NULLNULL,, PRIMARY
A continuación les paso el script de creación de la base de datos A continuación les paso el script de creación de la base de datos -- CREADO POR: HENRY JOE WONG URQUIZA
-- CREADO POR: HENRY JOE WONG URQUIZA
-- FECHA: 24FEB2011
-- FECHA: 24FEB2011
--
--
--- TUTORIAL DE COMO HACER UN CARRITO DE COMPRAS USANDO
-- TUTORIAL DE COMO HACER UN CARRITO DE COMPRAS USANDO
-- EL MODELO VISTA CONTROLADOR
-- EL MODELO VISTA CONTROLADOR
---- Creando la base de datos
-- Creando la base de datos
--CREATE
CREATE DATABASEDATABASE IFIF NOTNOT EXISTSEXISTS bdtutorial;bdtutorial; USE
USE bdtutorial;bdtutorial;
---- Creando la tabla `detalleventa`
-- Creando la tabla `detalleventa`
--DROP
DROP TABLETABLE IFIF EXISTSEXISTS `detalleventa`;`detalleventa`; CREATE
CREATE TABLETABLE `detalleventa` (`detalleventa` ( `codigoVenta`
`codigoVenta` intint(11)(11) NOTNOT NULLNULL,, `codigoProducto`
`codigoProducto` intint(11)(11) NOTNOT NULLNULL,, `cantidad`
`cantidad` decimaldecimal(18,2)(18,2) NOTNOT NULLNULL,, `descuento`
`descuento` decimaldecimal(18,2)(18,2) NOTNOT NULLNULL,, PRIMARY
KEY
KEY `FK_DetalleVenta_Producto` (`codigoProducto`),`FK_DetalleVenta_Producto` (`codigoProducto`), CONSTRAINT
CONSTRAINT `FK_DetalleVenta_Producto``FK_DetalleVenta_Producto` FOREIGNFOREIGN KEYKEY (`codigoProducto`)(`codigoProducto`) REFERENCESREFERENCES
`producto` (`codigoProducto`), `producto` (`codigoProducto`),
CONSTRAINT
CONSTRAINT `FK_DetalleVenta_Venta``FK_DetalleVenta_Venta` FOREIGNFOREIGN KEYKEY (`codigoVenta`)(`codigoVenta`) REFERENCESREFERENCES
`venta` (`codigoVenta`) `venta` (`codigoVenta`) ) ENGINE=InnoDB
) ENGINE=InnoDB DEFAULTDEFAULT CHARSET=latin1;CHARSET=latin1;
---- Creando la tabla `producto`
-- Creando la tabla `producto`
--DROP
DROP TABLETABLE IFIF EXISTSEXISTS `producto`;`producto`; CREATE
CREATE TABLETABLE `producto` (`producto` ( `codigoProducto`
`codigoProducto` intint(11)(11) NOTNOT NULLNULL,, `nombre`
`nombre` varcharvarchar(100)(100) NOTNOT NULLNULL,, `precio`
`precio` decimaldecimal(18,2)(18,2) NOTNOT NULLNULL,, PRIMARY
PRIMARY KEYKEY (`codigoProducto`)(`codigoProducto`) ) ENGINE=InnoDB
) ENGINE=InnoDB DEFAULTDEFAULT CHARSET=latin1;CHARSET=latin1;
---- Creando la tabla venta
-- Creando la tabla venta
--DROP
DROP TABLETABLE IFIF EXISTSEXISTS `venta`;`venta`; CREATE
CREATE TABLETABLE `venta` (`venta` ( `codigoVenta`
`codigoVenta` intint(11)(11) NOTNOT NULLNULL,, `cliente`
`cliente` varcharvarchar(100)(100) NOTNOT NULLNULL,, `fecha`
`fecha` datetimedatetime NOTNOT NULLNULL,, PRIMARY
PRIMARY KEYKEY (`codigoVenta`)(`codigoVenta`) ) ENGINE=InnoDB
) ENGINE=InnoDB DEFAULTDEFAULT CHARSET=latin1;CHARSET=latin1;
3.2. Creando los procedimientos almacenados 3.2. Creando los procedimientos almacenados
Según Wikipedia un procedimiento almacenado (stored procedure en inglés) es un programa (o Según Wikipedia un procedimiento almacenado (stored procedure en inglés) es un programa (o
procedimiento) el cual es almacenado físicamente en una base de datos. Su implementación varía de un procedimiento) el cual es almacenado físicamente en una base de datos. Su implementación varía de un
manejador de bases de datos a otro. La ventaja de un procedimiento almacenado es que al ser manejador de bases de datos a otro. La ventaja de un procedimiento almacenado es que al ser
ejecutado, en respuesta a una petición de usuario, es ejecutado directamente en el motor de bases de ejecutado, en respuesta a una petición de usuario, es ejecutado directamente en el motor de bases de datos, el cual usualmente corre en un servidor separado. Como tal, posee acceso directo a los datos que datos, el cual usualmente corre en un servidor separado. Como tal, posee acceso directo a los datos que necesita manipular y sólo necesita enviar sus resultados de
necesita manipular y sólo necesita enviar sus resultados de regreso al usuario, deshaciéndose de regreso al usuario, deshaciéndose de lala sobrecarga resultante de comunicar grandes cantidades de
sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes.datos salientes y entrantes. 3.2.1. Procedimientos almacenados para la tabla Producto
3.2.1. Procedimientos almacenados para la tabla Producto -- CREADO POR: HENRY JOE WONG URQUIZA
-- CREADO POR: HENRY JOE WONG URQUIZA
-- FECHA: 24FEBRERO2011
-- FECHA: 24FEBRERO2011
--
--
--- TUTORIAL DE COMO REALIZAR UN CARRITO DE COMPRAS CON JAVA Y JSP
-- TUTORIAL DE COMO REALIZAR UN CARRITO DE COMPRAS CON JAVA Y JSP
-- APLICANDO MODELO, VISTA Y CONTROLADOR
-- APLICANDO MODELO, VISTA Y CONTROLADOR
-- Procedimiento almacenado para insertar un producto
-- Procedimiento almacenado para insertar un producto
DROP
DROP PROCEDUREPROCEDURE IFIF EXISTSEXISTS `spI_producto`;`spI_producto`; DELIMITER $$
DELIMITER $$ CREATE
CREATE DEFINER=`root`@`localhost`DEFINER=`root`@`localhost` PROCEDUREPROCEDURE `spI_producto`(`spI_producto`( INOUT _codigoProducto
INOUT _codigoProducto intint ,, _nombre
_precio
_precio decimaldecimal(18, 2)(18, 2) )
) BEGIN
BEGIN
-- Genera una especie de autoincremental pero yo controlo los codigos
-- Genera una especie de autoincremental pero yo controlo los codigos
-- que genero
-- que genero
SELECT
SELECT IFNULL(IFNULL(MAXMAX(codigoProducto),0)+1(codigoProducto),0)+1 intointo _codigoProducto_codigoProducto FROMFROM `producto`;`producto`; INSERT
INSERT INTOINTO `producto`(`producto`( `codigoProducto`, `codigoProducto`, `nombre`, `nombre`, `precio` `precio` ) ) VALUES VALUES (( _codigoProducto, _codigoProducto, _nombre, _nombre, _precio _precio ); ); END END $$$$ DELIMITER ; DELIMITER ;
-- Procedimiento almacenado para actualizar un producto
-- Procedimiento almacenado para actualizar un producto
DROP
DROP PROCEDUREPROCEDURE IFIF EXISTSEXISTS `spU_producto`;`spU_producto`; DELIMITER $$
DELIMITER $$ CREATE
CREATE DEFINER=`root`@`localhost`DEFINER=`root`@`localhost` PROCEDUREPROCEDURE `spU_producto`(`spU_producto`( _codigoProducto
_codigoProducto intint ,, _nombre
_nombre varcharvarchar(100) ,(100) , _precio
_precio decimaldecimal(18, 2)(18, 2) )
) BEGIN
BEGIN
UPDATE
UPDATE productoproducto SET SET `nombre` = _nombre, `nombre` = _nombre, `precio` = _precio `precio` = _precio WHERE WHERE `codigoProducto` = _codigoProducto `codigoProducto` = _codigoProducto ; ; END END $$$$ DELIMITER ; DELIMITER ;
-- Procedimiento almacenado para obtener todos los productos
-- Procedimiento almacenado para obtener todos los productos
DROP
DROP PROCEDUREPROCEDURE IFIF EXISTSEXISTS `spF_producto_all`;`spF_producto_all`; DELIMITER $$
DELIMITER $$ CREATE
CREATE DEFINER=`root`@`localhost`DEFINER=`root`@`localhost` PROCEDUREPROCEDURE `spF_producto_all`(`spF_producto_all`( ) ) BEGIN BEGIN SELECT SELECT p.codigoProducto, p.codigoProducto, p.nombre, p.nombre, p.precio p.precio FROM FROM producto p producto p ORDER ORDER BYBY P.nombre P.nombre ; ; END END $$$$ DELIMITER ; DELIMITER ;
-- Procedimiento almacenado para obtener todos los productos DROP PROCEDURE IF EXISTS `spF_producto_one`;
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `spF_producto_one`(
_codigoProducto int
) BEGIN SELECT p.codigoProducto, p.nombre, p.precio FROM producto p
WHERE
p.codigoProducto = _codigoProducto
ORDER BY P.nombre ; END $$ DELIMITER ;
3.2.2. Procedimientos almacenados para la tabla venta -- CREADO POR: HENRY JOE WONG URQUIZA
-- FECHA: 24FEBRERO2011
--
--- TUTORIAL DE COMO REALIZAR UN CARRITO DE COMPRAS CON JAVA Y JSP -- APLICANDO MODELO, VISTA Y CONTROLADOR
-- Procedimiento almacenado para insertar una venta DROP PROCEDURE IF EXISTS `spI_venta`;
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `spI_venta`( INOUT _codigoVenta int ,
_cliente varchar(100) )
BEGIN
-- Codigo autogenerado
SELECT IFNULL(MAX(codigoVenta),0)+1 into _codigoVenta FROM `venta`; INSERT INTO `venta`(
`codigoVenta`, `cliente`, `fecha` ) VALUES ( _codigoVenta, _cliente, CURDATE() ); END $$ DELIMITER ;
-- Procedimiento almacenado para obtener todas las ventas DROP PROCEDURE IF EXISTS `spF_venta_All`;
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `spF_venta_All`( ) BEGIN SELECT v.codigoVenta AS CodigoVenta, v.cliente AS Cliente, v.fecha AS Fecha, d.codigoProducto AS CodigoProducto, p.nombre AS Nombre, p.precio AS Precio, d.cantidad AS Cantidad,
d.descuento AS Descuento,
p.precio*d.cantidad AS Parcial,
((p.precio*d.cantidad)-d.descuento) AS SubTotal, (
SELECT
SUM((dT.cantidad * pT.precio)-dT.descuento) AS TotalPagar FROM
DetalleVenta AS dT INNER JOIN
Producto AS pT ON dT.codigoProducto = pT.codigoProducto WHERE
dT.codigoVenta=v.codigoVenta ) AS TotalPagar
FROM
Venta AS v INNER JOIN
DetalleVenta AS d ON v.codigoVenta = d.codigoVenta INNER JOIN Producto AS p ON d.codigoProducto = p.codigoProducto
ORDER BY
CodigoVenta, Nombre ;
END $$
DELIMITER ;
-- Procedimiento almacenado para obtener una venta DROP PROCEDURE IF EXISTS `spF_venta_one`;
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `spF_venta_one`( _codigoVenta int ) BEGIN SELECT v.codigoVenta AS CodigoVenta, v.cliente AS Cliente, v.fecha AS Fecha, d.codigoProducto AS CodigoProducto, p.nombre AS Nombre, p.precio AS Precio, d.cantidad AS Cantidad, d.descuento AS Descuento, p.precio*d.cantidad AS Parcial, ((p.precio*d.cantidad)-d.descuento) AS SubTotal, ( SELECT
SUM((dT.cantidad * pT.precio)-dT.descuento) AS TotalPagar FROM
DetalleVenta AS dT INNER JOIN
Producto AS pT ON dT.codigoProducto = pT.codigoProducto WHERE
dT.codigoVenta=v.codigoVenta ) AS TotalPagar
FROM
Venta AS v INNER JOIN
DetalleVenta AS d ON v.codigoVenta = d.codigoVenta INNER JOIN Producto AS p ON d.codigoProducto = p.codigoProducto
WHERE
v.codigoVenta=_codigoVenta ORDER BY
Nombre ;
END $$
DELIMITER ;
Java - Aplicación Web, Carrito de Compras Parte II - Creación del Modelo
1. Entorno
• MySQL 5.1. • NetBeans IDE 6.9.1 • Apache Tomcat • JDK 1.6.0 - 212. Introducción
El modelo es la representación específica de la información con la cual el sistema opera. En resumen, el modelo se limita a lo relativo de la vista y su controlador facilitando las presentaciones visuales complejas. El sistema también puede operar con más datos no relativos a la presentación, haciendo uso integrado de otras lógicas de negocio y de datos afines con el sistema modelado. Acá crearemos
nuestros JavaBeans y las clases que se encargaran de llamar a los procedimientos almacenados que hemos creado en nuestra base de datosBDTutorialque esta en MySQL 5.1.. Para comunicar Java con Base de datos usamos lo que comúnmente se conoce como JDBC y para ejecutar consultas o
inserciones a nuestra base de datos usamos las interfaces java.sql.Statement que espera que se le pase una sentencia SQL de forma completa por ejemplo "insert into producto values(1,'valor01')", para
ejecutar sentencias preparadas se utiliza la interfaz java.sql.PreparedStatement que en los lugares donde se deben de poner los valores para la sentecia SQL se representan entre ? para después poder asignar sus valores respectivos por ejemplo "insert into producto values(?,?)" y la ultima clase para llamar a procedimientos almacenados es la clase java.sql.CallableStatement que es la que utilizaremos para este
tutorial
3. Creando el Proyecto
3.1. Proyecto en Netbeans
Primero debemos de crear un proyecto web en Netbeans y para eso abriremos el Netbeans y
buscaremos el menu File y luego New Project. Y seleccionaremos que deseamos crear un proyecto del tipo Web Application
De ahí presionamos el botón Next y nos pedirá que pongamos un nombre a nuestro proyecto y lo llamaremos CarritoComprasJSP
Luego nos pedirá que seleccionamos en que servidor queremos que se ejecute nuestro proyecto web. En este caso lo ejecutaremos en el servidor de Apache Tomcat
Para explicar la estructura que vamos a tener del proyecto, les presento el siguiente gráfico q ue nos indicara como se distribuirá el Modelo, el Controlador y la Vista
4. Desarrollo
4.1. Creando el Paquete
Primero debemos de crear nuestro paquete que se llamara Modelo. En el gráfico se explica como crear el paquete
Y al paquete lo llamaremos Modelo 4.2. Creando los JavaBeans
Para crear los JavaBeans debemos de crear las clases que tendran la misma estructura de las tablas de nuestra base de datos, eso quiere decir que si por ejemplo en alguna tabla de nuestra base de datos tenemos una columna del tipo Varchar en Java tendriamos una variable del tipo String, si tenemos un variable del tipo Decimal en Java seria double. Para eso hacemos clic derecho en nuestro paquete que se llama Modelo, de ahi nos vamos a New y seleccionamos Java Class
4.2.1. Clase Producto
La clase Producto tiene la misma estructura de nuestra tabla Producto de nuestra base de datos, a continuación les comparto el código fuente de la clase.