Anda di halaman 1dari 20

INSTITUTO TECNOLGICO DE NUEVO LEN

Subdireccin acadmica

Ingeniera en Sistemas Computacionales

Proyecto Carrito de Compras


TPICOS SELECTOS BASE DATOS

Profesor: Zeferino Gonzlez Snchez


Guillermo Antonio Snchez Leija 10480680
Donato Alan Guajardo Lozano10480709
Silvestre Missael Seplveda Ipia 10480430
Leonardo Francisco Garca Sarmiento 10480704

Gpe. , Nuevo len

10 de Noviembre del 2014

Entorno

MySQL 5.1.
NetBeans IDE 6.9.1
Apache Tomcat
JDK 1.6.0 - 21

Base de datos
CREATE DATABASE IF NOT EXISTS bdtutorial;
USE bdtutorial;
--- Creando la tabla `detalleventa`
-DROP TABLE IF EXISTS `detalleventa`;
CREATE TABLE `detalleventa` (
`codigoVenta` int(11) NOT NULL,
`codigoProducto` int(11) NOT NULL,
`cantidad` decimal(18,2) NOT NULL,
`descuento` decimal(18,2) NOT NULL,
PRIMARY KEY (`codigoVenta`,`codigoProducto`),
KEY `FK_DetalleVenta_Producto` (`codigoProducto`),
CONSTRAINT `FK_DetalleVenta_Producto` FOREIGN KEY (`codigoProducto`)
REFERENCES `producto` (`codigoProducto`),
CONSTRAINT `FK_DetalleVenta_Venta` FOREIGN KEY (`codigoVenta`)
REFERENCES `venta` (`codigoVenta`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--- Creando la tabla `producto`
-DROP TABLE IF EXISTS `producto`;
CREATE TABLE `producto` (
`codigoProducto` int(11) NOT NULL,
`nombre` varchar(100) NOT NULL,
`precio` decimal(18,2) NOT NULL,
PRIMARY KEY (`codigoProducto`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--- Creando la tabla venta
-DROP TABLE IF EXISTS `venta`;
CREATE TABLE `venta` (
`codigoVenta` int(11) NOT NULL,
`cliente` varchar(100) NOT NULL,
`fecha` datetime NOT NULL,
PRIMARY KEY (`codigoVenta`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

-- Procedimiento almacenado para insertar un producto


DROP PROCEDURE IF EXISTS `spI_producto`;
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `spI_producto`(
INOUT _codigoProducto int ,
_nombre varchar(100) ,
_precio decimal(18, 2)
)
BEGIN
-- Genera una especie de autoincremental pero yo controlo los codigos
-- que genero
SELECT IFNULL(MAX(codigoProducto),0)+1 into _codigoProducto FROM
`producto`;
INSERT INTO `producto`(
`codigoProducto`,
`nombre`,
`precio`
)
VALUES (
_codigoProducto,
_nombre,
_precio
);
END $$
DELIMITER ;
-- Procedimiento almacenado para actualizar un producto
DROP PROCEDURE IF EXISTS `spU_producto`;
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `spU_producto`(
_codigoProducto int ,
_nombre varchar(100) ,
_precio decimal(18, 2)
)
BEGIN
UPDATE producto
SET
`nombre` = _nombre,
`precio` = _precio
WHERE
`codigoProducto` = _codigoProducto
;
END $$
DELIMITER ;
-- Procedimiento almacenado para obtener todos los productos
DROP PROCEDURE IF EXISTS `spF_producto_all`;
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `spF_producto_all`(
)
BEGIN
SELECT
p.codigoProducto,
p.nombre,

p.precio
FROM
producto p
ORDER BY
P.nombre
;
END $$
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 ;

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 ;

-- Procedimiento almacenado para insertar un detalle de venta


DROP PROCEDURE IF EXISTS `spI_detalleventa`;
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `spI_detalleventa`(
_codigoVenta int ,
_codigoProducto int ,
_cantidad decimal(18, 2) ,
_descuento decimal(18, 2)
)
BEGIN
INSERT INTO `detalleventa`(
`codigoVenta`,
`codigoProducto`,
`cantidad`,
`descuento`
)
VALUES (
_codigoVenta,
_codigoProducto,
_cantidad,
_descuento
);
END $$
DELIMITER ;

_____

Cdigo en Java
package Modelo;
public class Producto {
//Las columnas que tiene la tabla Producto
private int codigoProducto;
private String nombre;
private double precio;
//Constructor de la clase sin parametros
public Producto() {
}
//Constructor de la clase con parametros
public Producto(int codigoProducto, String nombre, double precio) {
this.codigoProducto = codigoProducto;
this.nombre = nombre;
this.precio = precio;
}
//Metodo toString de la clase que nos retorna
//el nombre del producto
@Override
public String toString() {
return nombre.toUpperCase();
}
//Metodos get y set de la clase
public int getCodigoProducto() {
return codigoProducto;
}
public void setCodigoProducto(int codigoProducto) {
this.codigoProducto = codigoProducto;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public double getPrecio() {
return precio;
}
public void setPrecio(double precio) {
this.precio = precio;
}
}

Clase Venta
La clase Venta tiene la misma estructura de nuestra tabla Venta de nuestra base de datos,
a continuacin les comparto el cdigo fuente de la clase.
package Modelo;
// @author hwong
import java.sql.Timestamp;
public class Venta {
//Las columnas que tiene la tabla Venta
private int codigoVenta;
private String cliente;
private Timestamp fecha;
//Constructor de la clase sin parametros
public Venta() {
}
//Constructor de la clase con parametros
public Venta(int codigoVenta, String cliente, Timestamp fecha) {
this.codigoVenta = codigoVenta;
this.cliente = cliente;
this.fecha = fecha;
}
//Metodos get y set de la clase
public String getCliente() {
return cliente;
}
public void setCliente(String cliente) {
this.cliente = cliente;
}
public int getCodigoVenta() {
return codigoVenta;
}
public void setCodigoVenta(int codigoVenta) {
this.codigoVenta = codigoVenta;
}
public Timestamp getFecha() {
return fecha;
}
public void setFecha(Timestamp fecha) {
this.fecha = fecha;
}
}

Clase DetalleVenta
La clase DetalleVenta tiene la misma estructura de nuestra tabla DetalleVenta de nuestra
base de datos, a continuacin les comparto el cdigo fuente de la clase.
package Modelo;
// @author hwong
public class DetalleVenta {
//Las columnas que tiene la tabla DetalleVenta
private
private
private
private
private
private

int codigoVenta;
int codigoProducto;
double cantidad;
double descuento;
Producto producto;
Venta venta;

//Constructor sin parametros


public DetalleVenta() {
}
//Constructor con parametros
public DetalleVenta(int codigoVenta, int codigoProducto, double
cantidad, double descuento) {
this.codigoVenta = codigoVenta;
this.codigoProducto = codigoProducto;
this.cantidad = cantidad;
this.descuento = descuento;
}
//Metodos Get y Set de la clase
public double getCantidad() {
return cantidad;
}
public void setCantidad(double cantidad) {
this.cantidad = cantidad;
}
public int getCodigoProducto() {
return codigoProducto;
}
public void setCodigoProducto(int codigoProducto) {
this.codigoProducto = codigoProducto;
}
public int getCodigoVenta() {
return codigoVenta;
}

public void setCodigoVenta(int codigoVenta) {


this.codigoVenta = codigoVenta;
}
public double getDescuento() {
return descuento;
}
public void setDescuento(double descuento) {
this.descuento = descuento;
}
public Producto getProducto() {
return producto;
}
public void setProducto(Producto producto) {
this.producto = producto;
}
public Venta getVenta() {
return venta;
}
public void setVenta(Venta venta) {
this.venta = venta;
}
}

Estructura final
Al finalizar de crear las clases deberiamos tener 3 clases tal como se muestra en el grafico
siguiente

Cargando el Driver
Para poder comunicar nuestro proyecto con MySQL 5.1. primero debemos de adicionar el
driver a nuestro proyecto. Para eso hacemos clic derecho en nuestro proyecto y nos vamos
a la opcin que dice Properties y seleccionamos de ah Libraries y presionamos
el botn que dice Add Library y buscamos el que dice MySQL JDBC Driver

Creando la clase Conexion


Esta clase es la que centraliza la conexin con nuestra base de datos que esta en MySQL
nos va dar soporte para ciertos mtodos que vamos a usar en nuestras dems clases
package Modelo;
import
import
import
import

java.sql.CallableStatement;
java.sql.Connection;
java.sql.DriverManager;
java.sql.ResultSet;

//@author Henry Joe Wong Urquiza


public class Conexion {
//La url con la cual nos conectariamos a la base de datos
private static String url = "jdbc:mysql://localhost/bdtutorial";
//El usuario de la base de datos
private static String user = "root";
//La clave del usuario de la base de datos
private static String password = "clave";
//Metodo para obtener la conexion con la base de datos
public static synchronized Connection getConexion() {
Connection cn = null;
try {
//Cargamos el driver y le decimos que vamos a usar
//una conexion con mysql
Class.forName("com.mysql.jdbc.Driver");
//Obtenemos la conexion
cn = DriverManager.getConnection(url, user, password);
} catch (Exception e) {
cn = null;
} finally {
return cn;
}
}
//Metodo utilizado para cerrar el callablestatemente
public static synchronized void cerrarCall(CallableStatement cl) {
try{cl.close();}catch(Exception e){}
}
//Metodo utilizado para cerrar el resulset de datos
public static synchronized void cerrarConexion(ResultSet rs) {
try{rs.close();} catch (Exception e) {}
}
//Metodo utilizado para cerrar la conexion
public static synchronized void cerrarConexion(Connection cn) {
try{cn.close();} catch (Exception e) {}
}
//Metodo utilizado para deshacer los cambios en la base de datos
public static synchronized void deshacerCambios(Connection cn) {
try{cn.rollback();}catch (Exception e){}

}
}

Creando la clase ProductoBD


Que se encargara de hacer las consultas o inserciones a nuestra tabla Producto
package Modelo;
import
import
import
import
import
import

java.sql.CallableStatement;
java.sql.Connection;
java.sql.ResultSet;
java.sql.SQLException;
java.sql.Types;
java.util.ArrayList;

// @autor Henry Joe Wong Uruqiza


// Archivo: ProductoBD.java
// Creado: 24FEBRERO2011 12:39:08 PM
public class ProductoBD {
//Metodo utilizado para insertar un Producto a nuestra Base de datos
public static synchronized boolean insertarProducto(Producto
varproducto) {
Connection cn = null;
CallableStatement cl = null;
boolean rpta = false;
try {
//Nombre del procedimiento almacenado y como espera tres
parametros
//le ponemos 3 interrogantes
String call = "{CALL spI_producto(?,?,?)}";
//Obtenemos la conexion
cn = Conexion.getConexion();
//Decimos que vamos a crear una transaccion
cn.setAutoCommit(false);
//Preparamos la sentecia
cl = cn.prepareCall(call);
//Como el codigo se autogenera y es del tipo OUT en el
procedimiento
//almacenado le decimos que es OUT y el del tipo Integer en
Java
cl.registerOutParameter(1, Types.INTEGER);
//El siguiente parametro del procedimiento almacenado es el
nombre
cl.setString(2, varproducto.getNombre());
//Y por ultimo el precio
cl.setDouble(3, varproducto.getPrecio());
//Ejecutamos la sentencia y si nos devuelve el valor de 1 es
porque
//registro de forma correcta los datos
rpta = cl.executeUpdate() == 1 ? true : false;
if (rpta) {
//Confirmamos la transaccion

cn.commit();
} else {
//Negamos la transaccion
Conexion.deshacerCambios(cn);
}
Conexion.cerrarCall(cl);
Conexion.cerrarConexion(cn);
} catch (SQLException e) {
e.printStackTrace();
Conexion.deshacerCambios(cn);
Conexion.cerrarCall(cl);
Conexion.cerrarConexion(cn);
} catch (Exception e) {
e.printStackTrace();
Conexion.deshacerCambios(cn);
Conexion.cerrarCall(cl);
Conexion.cerrarConexion(cn);
}
return rpta;
}
//Metodo utilizado para insertar un Producto a nuestra Base de datos
public static synchronized boolean actualizarProducto(Producto
varproducto) {
Connection cn = null;
CallableStatement cl = null;
boolean rpta = false;
try {
//Nombre del procedimiento almacenado y como espera tres
parametros
//le ponemos 3 interrogantes
String call = "{CALL spU_producto(?,?,?)}";
//Obtenemos la conexion
cn = Conexion.getConexion();
//Decimos que vamos a crear una transaccion
cn.setAutoCommit(false);
//Preparamos la sentecia
cl = cn.prepareCall(call);
//El primer parametro del procedimiento almacenado es el
codigo
cl.setInt(1, varproducto.getCodigoProducto());
//El siguiente parametro del procedimiento almacenado es el
nombre
cl.setString(2, varproducto.getNombre());
//Y por ultimo el precio
cl.setDouble(3, varproducto.getPrecio());
//Ejecutamos la sentencia y si nos devuelve el valor de 1 es
porque
//registro de forma correcta los datos
rpta = cl.executeUpdate() == 1 ? true : false;
if (rpta) {
//Confirmamos la transaccion
cn.commit();
} else {
//Negamos la transaccion
Conexion.deshacerCambios(cn);
}

Conexion.cerrarCall(cl);
Conexion.cerrarConexion(cn);
} catch (SQLException e) {
e.printStackTrace();
Conexion.deshacerCambios(cn);
Conexion.cerrarCall(cl);
Conexion.cerrarConexion(cn);
} catch (Exception e) {
e.printStackTrace();
Conexion.deshacerCambios(cn);
Conexion.cerrarCall(cl);
Conexion.cerrarConexion(cn);
}
return rpta;
}
//Metodo utilizado para obtener todos los productos de nuestra base
de datos
public static synchronized ArrayList<Producto> obtenerProducto() {
//El array que contendra todos nuestros productos
ArrayList<Producto> lista = new ArrayList<Producto>();
Connection cn = null;
CallableStatement cl = null;
ResultSet rs = null;
try {
//Nombre del procedimiento almacenado
String call = "{CALL spF_producto_all()}";
cn = Conexion.getConexion();
cl = cn.prepareCall(call);
//La sentencia lo almacenamos en un resulset
rs = cl.executeQuery();
//Consultamos si hay datos para recorrerlo
//e insertarlo en nuestro array
while (rs.next()) {
Producto p = new Producto();
//Obtenemos los valores de la consulta y creamos
//nuestro objeto producto
p.setCodigoProducto(rs.getInt("codigoProducto"));
p.setNombre(rs.getString("nombre"));
p.setPrecio(rs.getDouble("precio"));
//Lo adicionamos a nuestra lista
lista.add(p);
}
Conexion.cerrarCall(cl);
Conexion.cerrarConexion(cn);
} catch (SQLException e) {
e.printStackTrace();
Conexion.cerrarCall(cl);
Conexion.cerrarConexion(cn);
} catch (Exception e) {
e.printStackTrace();
Conexion.cerrarCall(cl);
Conexion.cerrarConexion(cn);
}
return lista;
}

//Metodo utilizado para obtener todos los productos de nuestra base


de datos
public static synchronized Producto obtenerProducto(int codigo) {
Producto p = new Producto();
Connection cn = null;
CallableStatement cl = null;
ResultSet rs = null;
try {
//Nombre del procedimiento almacenado
String call = "{CALL spF_producto_one(?)}";
cn = Conexion.getConexion();
cl = cn.prepareCall(call);
cl.setInt(1, codigo);
//La sentencia lo almacenamos en un resulset
rs = cl.executeQuery();
//Consultamos si hay datos para recorrerlo
//e insertarlo en nuestro array
while (rs.next()) {
//Obtenemos los valores de la consulta y creamos
//nuestro objeto producto
p.setCodigoProducto(rs.getInt("codigoProducto"));
p.setNombre(rs.getString("nombre"));
p.setPrecio(rs.getDouble("precio"));
}
Conexion.cerrarCall(cl);
Conexion.cerrarConexion(cn);
} catch (SQLException e) {
e.printStackTrace();
Conexion.cerrarCall(cl);
Conexion.cerrarConexion(cn);
} catch (Exception e) {
e.printStackTrace();
Conexion.cerrarCall(cl);
Conexion.cerrarConexion(cn);
}
return p;
}
}

Creando la clase DetalleVentaBD


Sirve para insertar un detalle de la venta, el metodo insertarDetalle espera obtener la
conexion y la transaccion de la clase Venta. Debido a que esta ultima clase es la que inicia
la transaccion con la base de datos y es la nica encargada de confirmar o negar la
transaccion
package Modelo;
// @autor Henry Joe Wong Uruqiza
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.SQLException;
// Archivo: DetalleVentaBD.java
// Creado: 24FEBRERO2011 12:39:08 PM
public class DetalleVentaBD {
//Metodo utilizado para insertar un Detalle de Venta a nuestra Base
de datos
//Obtenemos la conexion de Venta debido a que la clase Venta es la
que inicia
//la transaccion
public static synchronized boolean insertarDetalleVenta(DetalleVenta
varDetalle, Connection cn) {
CallableStatement cl = null;
boolean rpta = false;
try {
//Nombre del procedimiento almacenado y como espera tres
parametros
//le ponemos 3 interrogantes
String call = "{CALL spI_detalleventa(?,?,?,?)}";
//Preparamos la sentecia
cl = cn.prepareCall(call);
//Codigo de la venta
cl.setInt(1, varDetalle.getCodigoVenta());
//Codigo del producto
cl.setInt(2, varDetalle.getCodigoProducto());
//La cantidad
cl.setDouble(3, varDetalle.getCantidad());
//El descuento
cl.setDouble(4, varDetalle.getDescuento());
//Ejecutamos la sentencia y si nos devuelve el valor de 1 es
porque
//registro de forma correcta los datos
rpta = cl.executeUpdate() == 1 ? true : false;
Conexion.cerrarCall(cl);
} catch (SQLException e) {
e.printStackTrace();
Conexion.cerrarCall(cl);
} catch (Exception e) {
e.printStackTrace();
Conexion.cerrarCall(cl);
}
return rpta;
}}

Creando la clase VentaBD


package Modelo;
import
import
import
import
import
import

java.sql.CallableStatement;
java.sql.Connection;
java.sql.ResultSet;
java.sql.SQLException;
java.sql.Types;
java.util.ArrayList;

// @autor Henry Joe Wong Uruqiza


// Archivo: VentaBD.java
// Creado: 24FEBRERO2011 12:39:08 PM
public class VentaBD {
//Metodo utilizado para insertar una Venta a nuestra Base de datos
public static synchronized boolean insertarVenta(Venta varventa,
ArrayList<DetalleVenta> detalle) {
Connection cn = null;
CallableStatement cl = null;
boolean rpta = false;
try {
//Nombre del procedimiento almacenado y como espera tres
parametros
//le ponemos 3 interrogantes
String call = "{CALL spI_venta(?,?)}";
//Obtenemos la conexion
cn = Conexion.getConexion();
//Decimos que vamos a crear una transaccion
cn.setAutoCommit(false);
//Preparamos la sentecia
cl = cn.prepareCall(call);
//Como el codigo se autogenera y es del tipo OUT en el
procedimiento
//almacenado le decimos que es OUT y el del tipo Integer en
Java
cl.registerOutParameter(1, Types.INTEGER);
//El siguiente parametro del procedimiento almacenado es el
cliente
cl.setString(2, varventa.getCliente());
//Ejecutamos la sentencia y si nos devuelve el valor de 1 es
porque
//registro de forma correcta los datos
rpta = cl.executeUpdate() == 1 ? true : false;
//Codigo que se genero producto de la insercion --->
codigoVenta
varventa.setCodigoVenta(cl.getInt(1));
if (rpta) {
for (DetalleVenta det : detalle) {
//Establecemos al detalle el codigo genero producto
de la venta
det.setCodigoVenta(varventa.getCodigoVenta());
//Insertamos el detalle y le pasamos la conexion

rpta = DetalleVentaBD.insertarDetalleVenta(det, cn);


//Si nos devuelve false salimos del for
if (!rpta) {
break;
}
}
if (rpta) {
//Confirmamos la transaccion
cn.commit();
} else {
//Negamos la transaccion
Conexion.deshacerCambios(cn);
}
} else {
//Negamos la transaccion
Conexion.deshacerCambios(cn);
}
Conexion.cerrarCall(cl);
Conexion.cerrarConexion(cn);
} catch (SQLException e) {
e.printStackTrace();
Conexion.deshacerCambios(cn);
Conexion.cerrarCall(cl);
Conexion.cerrarConexion(cn);
} catch (Exception e) {
e.printStackTrace();
Conexion.deshacerCambios(cn);
Conexion.cerrarCall(cl);
Conexion.cerrarConexion(cn);
}
return rpta;
}
//Metodo utilizado para obtener todos las ventas de nuestra base de
datos
public static synchronized ArrayList<DetalleVenta> obtenerVentas() {
//El array que contendra todos nuestros productos
ArrayList<DetalleVenta> lista = new ArrayList<DetalleVenta>();
Connection cn = null;
CallableStatement cl = null;
ResultSet rs = null;
try {
//Nombre del procedimiento almacenado
String call = "{CALL spF_venta_All()}";
cn = Conexion.getConexion();
cl = cn.prepareCall(call);
//La sentencia lo almacenamos en un resulset
rs = cl.executeQuery();
//Consultamos si hay datos para recorrerlo
//e insertarlo en nuestro array
while (rs.next()) {
Venta ven=new Venta();
Producto pro=new Producto();
DetalleVenta det=new DetalleVenta();
ven.setCodigoVenta(rs.getInt("CodigoVenta"));
ven.setCliente(rs.getString("Cliente"));
ven.setFecha(rs.getTimestamp("Fecha"));

pro.setCodigoProducto(rs.getInt("CodigoProducto"));
pro.setNombre(rs.getString("Nombre"));
pro.setPrecio(rs.getDouble("Precio"));
det.setCantidad(rs.getDouble("Cantidad"));
det.setDescuento(rs.getDouble("Parcial"));
det.setVenta(ven);
det.setProducto(pro);
lista.add(det);
}
Conexion.cerrarCall(cl);
Conexion.cerrarConexion(cn);
} catch (SQLException e) {
e.printStackTrace();
Conexion.cerrarCall(cl);
Conexion.cerrarConexion(cn);
} catch (Exception e) {
e.printStackTrace();
Conexion.cerrarCall(cl);
Conexion.cerrarConexion(cn);
}
return lista;
}
}

Anda mungkin juga menyukai