proyecto almacen java y mysql

48
1 Darío Vergara PreparedStatement Un objeto PreparedStatementse crea desde una sentencia SQL que se envía a labase de datos y se precompila antes de enviar cualquier dato. Podemos llamar alas sentencias setXXXapropiadas sobre el objeto PreparedStatementparaenviar datos. Manteniendo los objetos reparedStatementy Connectioncomovariables de ejemplar privadas reducimos la sobrecarga porque las sentencias SQLno tienen que compilarse cada vez que se envían.Las instrucciones SQLy los parámetros son enviados a la base de datos cuando se llama al métodoexecuteXXX. Administraremos la base de datos” cedecom “y en este caso la tabla “docentes”que se ve en la fig Listo. En proyecto en netbeans creamos el archivo de conexión.java Import java.sql.*; Import javax.swing.JOptionPane; public class conexion { public String db = "cedecom"; public String user = "root"; public String pass = ""; public String url = "jdbc:mysql://localhost/"+db; String driver = "com.mysql.jdbc.Driver"; publicconexion() { } public Connection Conectar() { Connection link = null; try { Class.forName(driver); link = DriverManager.getConnection(this.url, this.user, this.pass); } catch (Exception e) { JOptionPane.showMessageDialog(null, e); } return link; } }

Upload: dario-vergara

Post on 08-Nov-2014

277 views

Category:

Documents


0 download

DESCRIPTION

proyecto paso a paso de como crear y administrar una base de datos con mysql

TRANSCRIPT

Page 1: Proyecto Almacen Java y Mysql

1 Darío Vergara

PreparedStatement Un objeto PreparedStatementse crea desde una sentencia SQL que se envía a labase de datos y se precompila antes de enviar cualquier dato. Podemos llamar alas sentencias setXXXapropiadas sobre el objeto PreparedStatementparaenviar datos. Manteniendo los objetos reparedStatementy Connectioncomovariables de ejemplar privadas reducimos la sobrecarga porque las sentencias SQLno tienen que compilarse cada vez que se envían.Las instrucciones SQLy los parámetros son enviados a la base de datos cuando se llama al métodoexecuteXXX. Administraremos la base de datos” cedecom “y en este caso la tabla “docentes”que se ve en la fig

Listo. En proyecto en netbeans creamos el archivo de conexión.java Import java.sql.*; Import javax.swing.JOptionPane; public class conexion { public String db = "cedecom"; public String user = "root"; public String pass = ""; public String url = "jdbc:mysql://localhost/"+db; String driver = "com.mysql.jdbc.Driver"; publicconexion() { } public Connection Conectar() { Connection link = null; try { Class.forName(driver); link = DriverManager.getConnection(this.url, this.user, this.pass); } catch (Exception e) { JOptionPane.showMessageDialog(null, e); } return link; } }

Page 2: Proyecto Almacen Java y Mysql

2 Darío Vergara

Lo siguiente es verificar si tenemos el driver mysql-connector-java

El siguiente paso es probar si nuestra conexión está bien, para ello creamos un objeto conexión y que muestre un mensaje si todo está bien. Agregando el siguiente código a nuestro archivo conexión os es posible verificar si esta es exitosa o no. publicstaticvoidmain(String[] args) { conexionmysql = new conexion(); Connectioncn = mysql.Conectar(); if (cn != null){ try { System.out.println("LA CONECCION CON LA BD ESTA BIEN! "); cn.close(); // cerramos la conexion } catch (SQLException ex) { Logger.getLogger(conexion.class.getName()).log(Level.SEVERE, null, ex); } } } Quedando nuestro archivo conexion.java listo Import java.sql.*; Import java.io.*; Import java.util.logging.Level; Import java.util.logging.Logger; Import javax.swing.JOptionPane; public class conexion { public String db = "cedecom"; public String user = "root"; public String pass = ""; public String url = "jdbc:mysql://localhost/"+db; String driver = "com.mysql.jdbc.Driver"; publicconexion(){ } public Connection Conectar() {

Page 3: Proyecto Almacen Java y Mysql

3 Darío Vergara

Connection link = null; try { Class.forName(driver); link = DriverManager.getConnection(this.url, this.user, this.pass); } catch (Exception e) { JOptionPane.showMessageDialog(null, e); } return link; } public static void main(String[] args) { conexionmysql = new conexion(); Connection cn = mysql.Conectar(); if (cn != null){ try { System.out.println("LA CONECCION CON LA BD ESTA BIEN! "); cn.close(); // cerramos la conexion } catch (SQLException ex) { Logger.getLogger(conexion.class.getName()).log(Level.SEVERE, null, ex); } } } } Al correr nuestra aplicación debemos obtener

Si el resultado obtenido fue el anterior, pasamos al siguiente paso que es crear el formulario (JFrameForm), recuerda clic derecho sobre el paquete

Page 4: Proyecto Almacen Java y Mysql

4 Darío Vergara

Creamos los botones, campos de textos, la tabla , etiquetas y paneles , luego cambiamos el nombre de las variables, recuerda clic derechoChange Variable Name…

A los campos de textos le colocamostxt, a los botones btny a la tablatblseguido del nombre del campo botón etc Y hacemos los cambios respectivos como lo muestra la figura

frmdocentes2.java

Page 5: Proyecto Almacen Java y Mysql

5 Darío Vergara

Inserción del código en nuestro formulario (frmdocentes2.java) Al dar clic e Source se llega a la vista de código, donde podemos anexar el código correspondiente a cada botón)

1. En la cabecera y primera línea de código dentro de la clase frmdocentes2.java Import cedecom.conexion.conexion; Import java.sql.*; Import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.JOptionPane; import javax.swing.table.DefaultTableModel; import javax.swing.*; import javax.swing.table.*; import java.lang.String.*; import java.sql.PreparedStatement; public class frmdocentes2 extends javax.swing.JFrame { DefaultTableModel dtm=new DefaultTableModel();

2. En el constructor

public frmdocentes2() { initComponents(); Stringtitulos[]={"Cédula","Nombres","Apellidos","Teléfono","E-mail","Especialidad","Perfil"}; dtm.setColumnIdentifiers(titulos); tblDocentes.setModel(dtm); setSize(530,230); setLocation(200,200); }

3. Funciones Las funciones que necesitaremos para activar botones, habilitar o inhabilitar campos de textos voidhabilitar() { txtCedula.setEnabled(true); txtNombres.setEnabled(true); txtApellidos.setEnabled(true); txtTelefono.setEnabled(true); txtEmail.setEnabled(true); txtEspecialidad.setEnabled(true); txtPerfil.setEnabled(true); txtCedula.requestFocus(); }

Page 6: Proyecto Almacen Java y Mysql

6 Darío Vergara

voidinhabilitar() { txtNombres.setEnabled(false); txtApellidos.setEnabled(false); txtTelefono.setEnabled(false); txtEmail.setEnabled(false); txtEspecialidad.setEnabled(false); txtPerfil.setEnabled(false); } public void limpiarObjetos(){ txtCedula.setText(""); txtNombres.setText(""); txtApellidos.setText(""); txtTelefono.setText(""); txtEmail.setText(""); txtEspecialidad.setText(""); txtPerfil.setText(""); } public void activaBotones(booleann,booleane,booleanm,boolean g){ btnNuevo.setEnabled(n); btnEliminar.setEnabled(e); btnModificar.setEnabled(m); btnGrabar.setEnabled(g); }

4. Programar los botones Para programar un botón, hacemos clic derecho sobre este EventsActionactionPerformed

private void btnCancelarActionPerformed(java.awt.event.ActionEventevt) { inhabilitar(); int resp; resp=JOptionPane.showConfirmDialog(null,"¿Deseas Cancelar el proceso? ","pregunta",0); if(resp==0){ limpiarObjetos(); txtCedula.setEnabled(true); activaBotones(true,false,false,false); } }

Page 7: Proyecto Almacen Java y Mysql

7 Darío Vergara

private void btnNuevoActionPerformed(java.awt.event.ActionEventevt) { habilitar(); limpiarObjetos(); txtCedula.requestFocus(); activaBotones(false,false,false,true); }

private void btnBuscarActionPerformed(java.awt.event.ActionEventevt) { String b; String sentencia =""; conexionmysql = new conexion(); Connection cn = mysql.Conectar(); sentencia= "SELECT * FROM docentes"; if(btnNuevo.isEnabled()){ try{ PreparedStatementpst=cn.prepareStatement(sentencia); ResultSetrs = pst.executeQuery(sentencia); b=txtCedula.getText(); booleanencuentra=false; while(rs.next()){ if(b.equals(rs.getString(1))){ txtNombres.setText((String)rs.getString(2)); txtApellidos.setText((String)rs.getString(3)); txtTelefono.setText((String)rs.getString(4)); txtEmail.setText((String)rs.getString(5)); txtEspecialidad.setText((String)rs.getString(6)); txtPerfil.setText((String)rs.getString(7)); this.activaBotones(true, true, true, false); encuentra=true; break; } } if(encuentra==false){ limpiarObjetos(); txtCedula.setText("No existe"); txtCedula.requestFocus(); } } catch (SQLException e){ JOptionPane.showMessageDialog(null, e); } } }

Page 8: Proyecto Almacen Java y Mysql

8 Darío Vergara

private void btnModificarActionPerformed(java.awt.event.ActionEventevt) { intresp; resp=JOptionPane.showConfirmDialog(null,"¿Deseas Modificar los datos? ","pregunta",0); if(resp==0){ if(Integer.parseInt(txtCedula.getText())>0) { conexionmysql = new conexion(); Connection cn = mysql.Conectar(); String nom,apell,Email,Especialidad,Perfil; longident,tel; ident=Long.parseLong(txtCedula.getText()); nom=txtNombres.getText(); apell=txtApellidos.getText(); tel=Long.parseLong(txtTelefono.getText()); Especialidad=txtEspecialidad.getText(); Perfil=txtPerfil.getText(); Email=txtEmail.getText(); String actualizar=""; actualizar="UPDATE docentes SET nombres=?,apellidos=?,telefono=?,email=?,especialidad=?,perfil=?WHERE iddocente= ?"; try{ PreparedStatementpst=cn.prepareStatement(actualizar); pst.setString(1, nom); pst.setString(2, apell); pst.setLong(3,tel); pst.setString(4, Email); pst.setString(5,Especialidad); pst.setString(6, Perfil); pst.setLong(7, Long.valueOf(ident));//es el últimoparámetro en llenar intretorno=pst.executeUpdate(); pst.close(); cn.close(); if(retorno>0){ JOptionPane.showMessageDialog(null,"Actualización ejecutada correctamente"); } else{ JOptionPane.showMessageDialog(null," Error "); } activaBotones(true,false,false,false); limpiarObjetos(); } catch(SQLException e){ JOptionPane.showMessageDialog(null," Error "+e.toString()); } }else{ }} }

Page 9: Proyecto Almacen Java y Mysql

9 Darío Vergara

private void btnGrabarActionPerformed(java.awt.event.ActionEventevt) { intresp; resp=JOptionPane.showConfirmDialog(null,"¿ Desea grabar el registro ?"," pregunta",0); if(resp==0){ conexion mysql = new conexion(); Connection cn = mysql.Conectar(); String nomb,apell,email,espec,perf; Long ident,tel; String sentenciaSql=""; ident=Long.parseLong(txtCedula.getText()); nomb=txtNombres.getText(); apell=txtApellidos.getText(); tel=Long.parseLong(txtTelefono.getText()); email=txtEmail.getText(); espec=txtEspecialidad.getText(); perf=txtPerfil.getText(); String mensaje=""; sentenciaSql="INSERT INTO docentes(iddocente,nombres,apellidos,telefono,email,especialidad,perfil)" + " VALUES(?,?,?,?,?,?,?) "; mensaje="Todo bien"; String mensaje2="La Cedula y telefono so nmericos"; try { PreparedStatementpst=cn.prepareStatement(sentenciaSql); pst.setLong(1, ident); pst.setString(2, nomb); pst.setString(3, apell); pst.setLong(4, tel); pst.setString(5, email); pst.setString(6,espec); pst.setString(7, perf); int n=pst.executeUpdate(); pst.close(); cn.close(); if(n>0){ JOptionPane.showMessageDialog(null, mensaje); } else{ JOptionPane.showMessageDialog(null, mensaje2); } } catch (SQLException ex) { JOptionPane.showMessageDialog(null, ex); } } }

Page 10: Proyecto Almacen Java y Mysql

10 Darío Vergara

private void btnEliminarActionPerformed(java.awt.event.ActionEventevt) { intresp; intident; String comando; comando="DELETE FROM docentes"+" WHERE iddocente=?"; conexion mysql = new conexion(); Connection cn = mysql.Conectar(); ident=Integer.parseInt(txtCedula.getText()); resp=JOptionPane.showConfirmDialog(null,"¿Deseas eliminar el registro? ","pregunta",0); if(resp==0){ try{ PreparedStatementpst=cn.prepareStatement(comando); pst.setInt(1, ident); int n=pst.executeUpdate(); pst.close(); cn.close(); if(n>0){ JOptionPane.showMessageDialog(null, "Docenteborrado"); } activaBotones(true,false,false,false); limpiarObjetos(); } catch(SQLException e){ JOptionPane.showMessageDialog(null," Error "+e.toString()); } } }

private void btnCerrarActionPerformed(java.awt.event.ActionEventevt) { this.dispose(); }

Page 11: Proyecto Almacen Java y Mysql

11 Darío Vergara

private void btnVerActionPerformed(java.awt.event.ActionEventevt) { String sentenciasql =""; Conexion mysql = new conexion(); Connection cn = mysql.Conectar(); sentenciasql= "SELECT * FROM docentes"; try{ this.setSize(530,500); intf,i; PreparedStatementpst = cn.prepareStatement(sentenciasql); ResultSetrs = pst.executeQuery(sentenciasql); String datos[]=new String[7]; f=dtm.getRowCount(); if(f>0) for(i=0;i<f;i++) dtm.removeRow(0); while(rs.next()){ datos[0]=(String)rs.getString(1); datos[1]=(String)rs.getString(2); datos[2]=(String)rs.getString(3); datos[3]=(String)rs.getString(4); datos[4]=(String)rs.getString(5); datos[5]=(String)rs.getString(6); datos[6]=(String)rs.getString(7); dtm.addRow(datos); } } catch (SQLException e){ JOptionPane.showMessageDialog(null, e); } }

Page 12: Proyecto Almacen Java y Mysql

12 Darío Vergara

private void btnbuscarvariosActionPerformed(java.awt.event.ActionEventevt) { conexion mysql = new conexion(); Connection cn = mysql.Conectar(); String sentencia=""; longced; /* si queremos buscar por nombres String nombre; nombre=txtNombres.getText();*/ ced=Long.parseLong(txtCedula.getText()); sentencia= "SELECT * FROM docentes WHERE iddocente LIKE CONCAT('%', ? ,'%')"; try{ this.setSize(530,500); intf,i; PreparedStatementpst = cn.prepareStatement(sentencia); // pst.setString(1,nombre); pst.setLong(1,ced); ResultSetrs = pst.executeQuery(); String datos[]=new String[7]; f=dtm.getRowCount(); if(f>0) for(i=0;i<f;i++) dtm.removeRow(0); while(rs.next()){ datos[0]=(String)rs.getString(1); datos[1]=(String)rs.getString(2); datos[2]=(String)rs.getString(3); datos[3]=(String)rs.getString(4); datos[4]=(String)rs.getString(5); datos[5]=(String)rs.getString(6); datos[6]=(String)rs.getString(7); dtm.addRow(datos); } } catch (SQLException e){ JOptionPane.showMessageDialog(null, e); } }

Page 13: Proyecto Almacen Java y Mysql

13 Darío Vergara

5.Programar los campos de textos

private void txtCedulaActionPerformed(java.awt.event.ActionEventevt) { txtCedula.transferFocus(); // TODO add your handling code here: }

private void txtNombresActionPerformed(java.awt.event.ActionEventevt) { txtNombres.transferFocus(); // TODO add your handling code here: }

private void txtApellidosActionPerformed(java.awt.event.ActionEventevt) { txtApellidos.transferFocus(); // TODO add your handling code here: }

private void txtTelefonoActionPerformed(java.awt.event.ActionEventevt) { txtTelefono.transferFocus(); // TODO add your handling code here: }

private void txtEmailActionPerformed(java.awt.event.ActionEventevt) { txtEmail.transferFocus(); // TODO add your handling code here: }

private void txtEspecialidadActionPerformed(java.awt.event.ActionEventevt) { txtEspecialidad.transferFocus(); // TODO add your handling code here: }

private void txtPerfilActionPerformed(java.awt.event.ActionEventevt) { txtEspecialidad.transferFocus(); // TODO add your handling code here: }

Page 14: Proyecto Almacen Java y Mysql

14 Darío Vergara

Tipos de datos y conversiones

Long tel;

tel=Long.parseLong(txtTelefono.getText());

String nomb;

nomb=txtNombres.getText();

int cod;

cod=Integer.parseInt(txtCedula.getText());

Double k;

k=Double.parseDouble(txtCedula.getText());

Page 15: Proyecto Almacen Java y Mysql

15 Darío Vergara

Inserción de Registros en tablas con claves foráneas Supongamos que tenemos una base de datos llamada almacén CREATE DATABASE almacen; USE almacen; CREATE TABLE productos(codp int (10) not null primary key, nombre varchar(100) not null, precio int (7) not null)ENGINE=innodb; CREATE TABLE cajeros(codc bigint(15) not null primary key, Nombre varchar(30) not null,Apellido varchar(30) not null )ENGINE=innodb; CREATE TABLE maquina(codm bigint (15) not null primary key, piso int not null )ENGINE=innodb; CREATE TABLE venta(codp int (10) not null,codc bigint(15) not null,codm bigint (15) not null,index(codp,codc,codm), foreign key(codp) references productos (codp) on delete cascade on update cascade,foreign key(codc) references cajeros(codc) on delete cascade on update cascade,foreign key(codm) references maquina (codm) on delete cascade on update cascade )ENGINE=innodb;

Como podemos ver , la tabla ventas tiene claves foráneas

Es decir para llenar esta tabla debemos tomar los datos que están guardados en las tablas donde la clave es primaria.

Page 16: Proyecto Almacen Java y Mysql

16 Darío Vergara

Para tomar esos datos, primero los tomaré de la tabla donde estos son clave primaria y los leeré a través de un combobox, esta vez crearé un formulario interno para luego mostrarlo en un formulario que he tomado como principal.

Lo llamare frmVentas Note la estructura de un formulario interno o JInteralFrame Form

Le agrego tres etiquetas para identificarlo y los tres combobox

Page 17: Proyecto Almacen Java y Mysql

17 Darío Vergara

Ahora vamos a mostrar la información en el primer combo, para ello agregamos a la clase principal

1. En la cabecera y primera línea de código dentro de la clase frmVentas el siguiente código (private javax.swing.DefaultComboBoxModel modelocboproducto;) Quedando asi: import conexion.conexion; import java.sql.*; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.JOptionPane; import javax.swing.table.DefaultTableModel; import javax.swing.*; import javax.swing.table.*; import java.lang.String.*; import java.sql.PreparedStatement; public class frmVentas extends javax.swing.JInternalFrame { private javax.swing.DefaultComboBoxModel modelocboproducto;

2. En el constructor public frmVentas() { modelocboproducto = new javax.swing.DefaultComboBoxModel(new String[] {}); inicbocboproducto (); initComponents(); }

Page 18: Proyecto Almacen Java y Mysql

18 Darío Vergara

3. Las funciones private void inicbocboproducto () { String sentencia=""; conexion mysql = new conexion(); Connection cn = mysql.Conectar(); sentencia= " SELECT codp FROM productos ORDER BY codp "; try { PreparedStatement pst=cn.prepareStatement(sentencia); ResultSet rs = pst.executeQuery(sentencia); modelocboproducto.addElement("codigo"); //Llenamos con datos el JComboBox while(rs.next()) modelocboproducto.addElement(rs.getString("codp")); } catch (Exception e) { } } Para asociar al combo con “ modelocboproducto “ debemos hacer lo siguiente: Clic derecho sobre el combo y escogemos propiedades

Page 19: Proyecto Almacen Java y Mysql

19 Darío Vergara

Se abre la siguiente ventana, donde damos clic en examinar frente de model

Escogemos Custom Code

Y en la ventana que se abre introducimos nuestro modelo y pulsamos ok

Page 20: Proyecto Almacen Java y Mysql

20 Darío Vergara

Para probar si el combo está bien, vinculamos este formulario al formulario principal y en un menú de esta agregamos el siguiente código Bueno, la ventana principal que tengo es esta.

Ahora damos clic derecho sobre ventas

private void jMenuItem2ActionPerformed(java.awt.event.ActionEvent evt) { frmVentas h1 = new frmVentas(); jDesktopPane1.add(h1); h1.show(); } Recuerde que el nombre del formulario que tiene el combo es frmVentas Ejecutamos el formulario principal y al escoger ventas

Podemos ver nuestro combo haciendo la consulta

De forma similar hacemos con los dos siguientes combos

Page 21: Proyecto Almacen Java y Mysql

21 Darío Vergara

Luego de ver los registro en cada combo, el paso que sigue es hacer la inserción con los datos recibidos. Cambiamos el nombre de varia bles de cada combo, para facilitar el reconocimiento

cboproducto cbocajero cbomaquina

Page 22: Proyecto Almacen Java y Mysql

22 Darío Vergara

Editando Los botones

private void btnGrabarActionPerformed(java.awt.event.ActionEvent evt) { int resp; resp=JOptionPane.showConfirmDialog(null,"¿ Desea grabar el registro ?"," pregunta",0); if(resp==0){ conexion mysql = new conexion(); Connection cn = mysql.Conectar(); String producto,cajero,maquina; String sentenciaSql=""; producto=cboproducto.getSelectedItem().toString(); cajero=cbocajero.getSelectedItem().toString(); maquina=cbomaquina.getSelectedItem().toString(); String mensaje=""; sentenciaSql="INSERT INTO venta(codp,codc,codm)" + " VALUES(?,?,?) "; mensaje="Todo bien"; try { PreparedStatement pst=cn.prepareStatement(sentenciaSql); pst.setString(1, producto); pst.setString(2, cajero); pst.setString(3, maquina); int n=pst.executeUpdate(); pst.close(); cn.close(); if(n>0){ JOptionPane.showMessageDialog(null, mensaje); } else{ JOptionPane.showMessageDialog(null,"Error"); } } catch (SQLException ex) { JOptionPane.showMessageDialog(null, ex); } } }

private void btnNuevoActionPerformed(java.awt.event.ActionEvent evt) { activaBotones(false,false,false,true); }

Page 23: Proyecto Almacen Java y Mysql

23 Darío Vergara

private void btnEliminarActionPerformed(java.awt.event.ActionEvent evt) { int resp; String producto,cajero,maquina; String comando; comando="DELETE FROM venta"+" WHERE codp=? AND codc=? AND codm=? "; conexion mysql = new conexion(); Connection cn = mysql.Conectar(); producto=cboproducto.getSelectedItem().toString(); cajero=cbocajero.getSelectedItem().toString(); maquina=cbomaquina.getSelectedItem().toString(); resp=JOptionPane.showConfirmDialog(null,"¿Deseas eliminar el registro? ","pregunta",0); if(resp==0){ try{ PreparedStatement pst=cn.prepareStatement(comando); pst.setString(1, producto); pst.setString(2, cajero); pst.setString(3, maquina); int n=pst.executeUpdate(); pst.close(); cn.close(); if(n>0){ JOptionPane.showMessageDialog(null, "Lista de llamadas borrada"); } activaBotones(true,false,false,false); } catch(SQLException e){ JOptionPane.showMessageDialog(null," Error "+e.toString()); } } }

Page 24: Proyecto Almacen Java y Mysql

24 Darío Vergara

private void btnModificarActionPerformed(java.awt.event.ActionEvent evt) { int resp; resp=JOptionPane.showConfirmDialog(null,"¿Deseas Modificar los datos? ","pregunta",0); if(resp==0){ conexion mysql = new conexion(); Connection cn = mysql.Conectar(); String producto,cajero,maquina; producto=cboproducto.getSelectedItem().toString(); cajero=cbocajero.getSelectedItem().toString(); maquina=cbomaquina.getSelectedItem().toString(); String actualizar=""; actualizar="UPDATE venta SET codc=?,codm=? WHERE codp= ?"; try{ PreparedStatement pst=cn.prepareStatement(actualizar); pst.setString(1, cajero); pst.setString(2, maquina); pst.setString(3, producto); int retorno=pst.executeUpdate(); pst.close(); cn.close(); if(retorno>0){ JOptionPane.showMessageDialog(null,"Actualización ejecutada correctamente"); } else{ JOptionPane.showMessageDialog(null," Error "); } activaBotones(true,false,false,false); } catch(SQLException e){ JOptionPane.showMessageDialog(null," Error "+e.toString()); } } }

Page 25: Proyecto Almacen Java y Mysql

25 Darío Vergara

private void verActionPerformed(java.awt.event.ActionEvent evt) { String sentenciasql =""; conexion mysql = new conexion(); Connection cn = mysql.Conectar(); sentenciasql= "SELECT * FROM venta"; try{ this.setSize(600,750); int f,i; PreparedStatement pst = cn.prepareStatement(sentenciasql); ResultSet rs = pst.executeQuery(sentenciasql); String datos[]=new String[3]; f=dtm.getRowCount(); if(f>0) for(i=0;i<f;i++) dtm.removeRow(0); while(rs.next()){ datos[0]=(String)rs.getString(1); datos[1]=(String)rs.getString(2); datos[2]=(String)rs.getString(3); dtm.addRow(datos); } } catch (SQLException e){ JOptionPane.showMessageDialog(null, e); } } Nota: Recuerda agregar a a la clase principal public class frmVentas extends javax.swing.JInternalFrame { DefaultTableModel dtm=new DefaultTableModel(); Y al constructor String titulos[]={"Producto","Cajero","Maquina"}; dtm.setColumnIdentifiers(titulos); tblventas.setModel(dtm); setSize(530,230); setLocation(200,200);

Page 26: Proyecto Almacen Java y Mysql

26 Darío Vergara

Realizando Consultas de nuestra base de datos El siguiente paso es realizar las consultas para nuestro almacén Como consultas de productos, informe de venta etc. Para ello vamos a crear un menú, en nuestro formulario principal con los siguientes menuitens

1. Mostrar el número de ventas de cada producto, ordenado de más a menos ventas. La sentencia sql para esa consulta es:

SELECT productos.codp, productos.nombre, COUNT(venta.codp) FROM productos LEFT JOIN venta ON productos.codp = venta.codp GROUP BY codp, nombre ORDER BY COUNT(venta.codp) DESC Ahora creamos el formulario interno Recuerde.

Lo llamas ventasporproductos Como solo es consulta, lo que debemos hacer es colocarle una tabla y tres botones y un campo de texto.

Page 27: Proyecto Almacen Java y Mysql

27 Darío Vergara

La estructura del proyecto es

********Los paquetes importado********** package almacen; import conexion.conexion; import java.sql.*; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.JOptionPane; import javax.swing.table.DefaultTableModel; import javax.swing.*; import javax.swing.table.*; import java.lang.String.*; import java.sql.PreparedStatement;

Page 28: Proyecto Almacen Java y Mysql

28 Darío Vergara

***********en la clase principal ************** public class ventasporproductos extends javax.swing.JInternalFrame { DefaultTableModel dtm=new DefaultTableModel(); **********En el constructor************** public ventasporproductos() { initComponents(); String titulos[]={"Código","Nombres","Cantidad Vendida"}; dtm.setColumnIdentifiers(titulos); tblvetas.setModel(dtm); setSize(530,280); setLocation(200,200); }

private void btnmostrartodoActionPerformed(java.awt.event.ActionEvent evt) { String sentenciasql =""; conexion mysql = new conexion(); Connection cn = mysql.Conectar(); sentenciasql= "SELECT productos.codp, productos.nombre, COUNT(venta.codp) " + "FROM productos LEFT JOIN venta ON productos.codp = venta.codp " + "GROUP BY codp, nombre ORDER BY COUNT(venta.codp) DESC"; try{ this.setSize(530,500); int f,i; PreparedStatement pst = cn.prepareStatement(sentenciasql); ResultSet rs = pst.executeQuery(sentenciasql); String datos[]=new String[3]; f=dtm.getRowCount(); if(f>0) for(i=0;i<f;i++) dtm.removeRow(0); while(rs.next()){ datos[0]=(String)rs.getString(1); datos[1]=(String)rs.getString(2); datos[2]=(String)rs.getString(3); dtm.addRow(datos); } } catch (SQLException e){ JOptionPane.showMessageDialog(null, e); } }

Page 29: Proyecto Almacen Java y Mysql

29 Darío Vergara

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { conexion mysql = new conexion(); Connection cn = mysql.Conectar(); String sentencia=""; int ced; String nombre; ced=Integer.parseInt(txtcodigo.getText()); sentencia= "SELECT productos.codp, productos.nombre, COUNT(venta.codp)" + "FROM productos LEFT JOIN venta ON productos.codp = venta.codp " + "WHERE productos.codp LIKE CONCAT('%', ? ,'%')" + "GROUP BY codp, nombre ORDER BY COUNT(venta.codp) DESC "; try{ this.setSize(530,500); int f,i; PreparedStatement pst = cn.prepareStatement(sentencia); // pst.setString(1,nombre); pst.setInt(1,ced); ResultSet rs = pst.executeQuery(); String datos[]=new String[3]; f=dtm.getRowCount(); if(f>0) for(i=0;i<f;i++) dtm.removeRow(0); while(rs.next()){ datos[0]=(String)rs.getString(1); datos[1]=(String)rs.getString(2); datos[2]=(String)rs.getString(3); dtm.addRow(datos); } } catch (SQLException e){ JOptionPane.showMessageDialog(null, e); } }

SELECT [ALL | DISTINCT ]

<nombre_campo> [{,<nombre_campo>}]

FROM <nombre_tabla>

[{INNER JOIN <nombre_tabla> ON <condicion_combinacion>}]

[WHERE <condicion> [{ AND|OR <condicion>}]]

[GROUP BY <nombre_campo> [{,<nombre_campo >}]]

[HAVING <condicion>[{ AND|OR <condicion>}]]

[ORDER BY <nombre_campo>|<indice_campo> [ASC | DESC]

[{,<nombre_campo>|<indice_campo> [ASC | DESC ]}]]

Page 30: Proyecto Almacen Java y Mysql

30 Darío Vergara

Inserción de Imagenes en Mysql Anexamos la siguiente tabla a nuestro proyecto

create table fotos (

id_foto INT not null PRIMARY KEY,

nombre VARCHAR(40) not null,

imagen MEDIUMBLOB not null

)ENGINE=innodb;

Procedemos a crear el formulario interno

E introducir el código para programarlo Los paquetes necesarios package almacen; import conexion.conexion; import java.sql.*; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.JOptionPane; import javax.swing.table.DefaultTableModel; import javax.swing.*; import javax.swing.table.*; import java.lang.String.*; import java.sql.PreparedStatement; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.sql.Connection;

Page 31: Proyecto Almacen Java y Mysql

31 Darío Vergara

import javax.swing.filechooser.FileFilter; import javax.swing.filechooser.FileNameExtensionFilter; import java.io.File; import java.io.FileOutputStream;

Programar los botones

private void btnexaminarActionPerformed(java.awt.event.ActionEvent evt) { FileFilter filtro = new FileNameExtensionFilter("Archivos de Imagenes", "jpg", "jpeg", "GIF","BMP","PNG"); JFileChooser fileChooser=new JFileChooser(); fileChooser.setFileFilter(filtro); int result=fileChooser.showOpenDialog(null); if(result==JFileChooser.APPROVE_OPTION) { File file=fileChooser.getSelectedFile(); txtImagen.setText(String.valueOf(file)); } }

private void btnGuardarActionPerformed(java.awt.event.ActionEvent evt) { int resp; resp=JOptionPane.showConfirmDialog(null,"¿ Desea grabar el registro ?"," pregunta",0); if(resp==0){ conexion mysql = new conexion(); Connection cn = mysql.Conectar(); String nomb; int ident; FileInputStream fis = null; String sentenciaSql=""; nomb=txtNombres.getText(); ident=Integer.parseInt(txtidentificacion.getText()); File file = new File(txtImagen.getText()); try { fis = new FileInputStream(file); } catch (FileNotFoundException ex) { Logger.getLogger(insertaimagen.class.getName()).log(Level.SEVERE, null, ex); } String mensaje=""; sentenciaSql="INSERT INTO fotos(id_foto,nombre,imagen)" + " VALUES(?,?,?) "; mensaje="Todo bien";

Page 32: Proyecto Almacen Java y Mysql

32 Darío Vergara

try { PreparedStatement pst=cn.prepareStatement(sentenciaSql); pst.setInt(1, ident); pst.setString(2, nomb); pst.setBinaryStream(3, fis, (int) file.length()); int n=pst.executeUpdate(); pst.close(); cn.close(); if(n>0){ JOptionPane.showMessageDialog(null, mensaje); } else{ JOptionPane.showMessageDialog(null,"Error"); } } catch (SQLException ex) { JOptionPane.showMessageDialog(null, ex); } } }

Recuperar imágenes de Mysql Para ver las imágenes insertadas anteriormente, debemos crear un nuevo formulario (no es necesario, se puede ajustar al formulario anterior, lo hago para que sea mas claro)

Page 33: Proyecto Almacen Java y Mysql

33 Darío Vergara

La imagen la vamos a mostrar en el label, este label le asignamos un tamaño, yo por ejemplo le di ancho y alto 280 px.

Los paquetes a importar package almacen; import conexion.conexion; import java.awt.Image; import java.sql.*; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.JOptionPane; import javax.swing.table.DefaultTableModel; import javax.swing.*; import javax.swing.table.*; import java.lang.String.*; import java.sql.PreparedStatement; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.sql.Connection; import javax.swing.filechooser.FileFilter; import javax.swing.filechooser.FileNameExtensionFilter; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.Iterator; import java.util.logging.Level; import java.util.logging.Logger; import javax.imageio.ImageIO; import javax.imageio.ImageReadParam; import javax.imageio.ImageReader; import javax.imageio.stream.ImageInputStream;

programar los botones

private void btnverActionPerformed(java.awt.event.ActionEvent evt) { conexion mysql = new conexion(); Connection cn = mysql.Conectar(); String sentenciaSql=""; sentenciaSql="SELECT imagen FROM fotos where id_foto = ? ";

Page 34: Proyecto Almacen Java y Mysql

34 Darío Vergara

String id_foto=txtident.getText(); try{ PreparedStatement pst=cn.prepareStatement(sentenciaSql); pst.setString(1, id_foto); ResultSet res = pst.executeQuery(); while(res.next()) { Image i=null; Blob blob = res.getBlob("imagen"); if (blob != null) { i= javax.imageio.ImageIO.read(blob.getBinaryStream()); ImageIcon image = new ImageIcon(i); lbimagen.setIcon(image); if(image.getIconHeight() > 342 || image.getIconWidth() > 230){ ImageIcon imageScalada = new ImageIcon(image.getImage().getScaledInstance(280,280,Image.SCALE_DEFAULT)); lbimagen.setIcon(imageScalada); } else{ lbimagen.setIcon(image); } } break; } res.close(); pst.close(); cn.close(); }catch(Exception e) { JOptionPane.showMessageDialog(this,e.getMessage()); } }

Page 35: Proyecto Almacen Java y Mysql

35 Darío Vergara

Descargando el software necesario

http://www.netbeans.org Netbeans

http://dev.mysql.com/downloads/MySQL http://ireport.sourceforge.net iReport

Librerías

http://commons.apache.org/beanutils/ commons-beanutils

http://commons.apache.org/collections/ commons-collections

http://commons.apache.org/digester/ commons-digester

http://www.mvnsearch.org/maven2/commons-javaflow/commons-javaflow/20060411/

commons-javaflow

http://commons.apache.org/logging/ commons-logging

http://jasperforge.org/projects/jasperreports jasperreports

http://itextpdf.com/download.php itext

Note que la versión de jasperreports es igual a la de iReport

Page 36: Proyecto Almacen Java y Mysql

36 Darío Vergara

Instalación del iReport Al descomprimir la carpeta, encontramos los siguientes archivos

El paso siguiente es abrir netbeans , nos dirigimos a la pestaña

Tools o Herramientas si esta en ingle, como el caso que se

muestra en pantalla, damos clic en plugins y se abre una

ventanita como la mostrada.

Escogemos la occion Downloaded o descargado según el caso, luego en adicionar el plugins y lo

buscamos

Page 37: Proyecto Almacen Java y Mysql

37 Darío Vergara

Lo seleccionamos y damos clic en install

Diseño del reporte Creo un paquete para guardar el reporte

Dentro de dicho paquete creó un nuevo archivo, de reportes en blanco

Page 38: Proyecto Almacen Java y Mysql

38 Darío Vergara

Lo llame reportesalmacen

Si todo está bien debemos tener algo parecido

Page 39: Proyecto Almacen Java y Mysql

39 Darío Vergara

En la banda Detail agrregaremos los campos de nuestra tabla.

Para ello debemos tener seleccionada la base de datos

Damos clic en el icono que se abre una ventana donde debemos agregar la base de datos , usuario

y contraseña, luego uardamos

Page 40: Proyecto Almacen Java y Mysql

40 Darío Vergara

damos clic en Report

Inspector para luego

seleccionar edit query

Al dar clic en Edit Query se abre una ventana donde hacemos la consulta.

SELECT * FROM cajeros;

Page 41: Proyecto Almacen Java y Mysql

41 Darío Vergara

Al desplegar el nodo fields podemos ver los campos de la tabla

ahora solo basta con arrastrarlos y ubicarlos e la banda Details

Quedando de la siguiente manera

Page 42: Proyecto Almacen Java y Mysql

42 Darío Vergara

Luego añadimos la fecha, para ello agregamos un campo text field y sobre este hacemos clic

derecho

Page 43: Proyecto Almacen Java y Mysql

43 Darío Vergara

Agregando parámetros al reporte.

En el inspector del reporte hacemos clic derecho sobre parameters y adicionamos el nuevo

parametro

Lo renombramos

Page 44: Proyecto Almacen Java y Mysql

44 Darío Vergara

El parámetro debe ser del mismo tipo de datos de la variable o campo de datos de la tabla

Y cambiamos la consulta en Edit Query

SELECT * FROM `cajeros` cajeros WHERE codc= $P{identificacion};

Page 45: Proyecto Almacen Java y Mysql

45 Darío Vergara

El otro parámetro que es el de un logo

Guardamos la imagen logo en la carpeta donde tenemos los reportes

Con la herramienta Image la ubicamos en la banda que queremos que aparezca

Y en la paleta de propiedades colocamos en Image Expression

Colocamos el parámetro logo ($P {logo})

Agregar las librerías Creamos una clase

Page 46: Proyecto Almacen Java y Mysql

46 Darío Vergara

Y agregamos el siguiente código

package almacen; import conexion.conexion; import java.net.URL; import java.sql.*; import javax.swing.*; import java.util.HashMap; import java.util.Map; import net.sf.jasperreports.engine.*; import net.sf.jasperreports.engine.JasperReport; import net.sf.jasperreports.engine.util.JRLoader; import net.sf.jasperreports.view.*; import net.sf.jasperreports.view.save.JRPdfSaveContributor.*; import net.sf.jasperreports.view.JRViewer.*; import net.sf.jasperreports.view.save.JRMultipleSheetsXlsSaveContributor.*; public class Reporte{ //direccion para la imagen private final String logotipo="/Reporte/logo.jpg"; public Reporte() { } public void ejecutarReporte(long identificacion){

Page 47: Proyecto Almacen Java y Mysql

47 Darío Vergara

try{ conexion mysql = new conexion(); Connection cn = mysql.Conectar(); URL archivo=this.getClass().getResource("/Reporte/reportesalmacen.jasper"); System.out.println("Cargando desde: " + archivo); if(archivo == null){ System.out.println("No se encuentra el archivo."); System.exit(2); } JasperReport masterReport= null; try { masterReport= (JasperReport) JRLoader.loadObject(archivo); } catch (JRException e) { System.out.println("Error cargando el reporte maestro: " + e.getMessage()); System.exit(3); } Map parametro= new HashMap(); parametro.clear(); parametro.put("logo", this.getClass().getResourceAsStream(logotipo)); parametro.put("identificacion",identificacion); JasperPrint jasperPrint= JasperFillManager.fillReport(masterReport,parametro,cn); JasperViewer jviewer= new JasperViewer(jasperPrint,false); jviewer.setTitle("Reporte de Cajeros"); jviewer.setVisible(true); }catch (Exception j){ System.out.println("Mensaje de Error:"+j.getMessage()); } } public void cerrar(){ try { conexion mysql = new conexion(); Connection cn = mysql.Conectar(); cn.close(); } catch (SQLException ex) { ex.printStackTrace(); } } }

Page 48: Proyecto Almacen Java y Mysql

48 Darío Vergara

Formulario de acceso al reporte

En este formulario debemos editar el botón generar

package almacen;

public class parametro extends javax.swing.JInternalFrame {

private Reporte jasper; public parametro() { initComponents(); jasper=new Reporte(); } Programamos el botón generar

private void btngenerarActionPerformed(java.awt.event.ActionEvent evt) {

long identificacion=Long.parseLong(txtident.getText()); jasper.ejecutarReporte(identificacion); }