Sunteți pe pagina 1din 48

PreparedStatement

Un objeto PreparedStatementse crea desde una sentencia SQL que se enva 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 envan.Las instrucciones SQLy los parmetros son enviados a la base de datos cuando se llama al mtodoexecuteXXX.
Administraremos la base de datos cedecom y en este caso la tabla docentesque se ve en la fig

Listo. En proyecto en netbeans creamos el archivo de conexin.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; } }

1 Daro Vergara

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

El siguiente paso es probar si nuestra conexin est bien, para ello creamos un objeto conexin y que muestre un mensaje si todo est bien. Agregando el siguiente cdigo a nuestro archivo conexin 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() { 2 Daro 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 aplicacin 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

3 Daro 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 botn etc Y hacemos los cambios respectivos como lo muestra la figura

frmdocentes2.java

4 Daro Vergara

Insercin del cdigo en nuestro formulario (frmdocentes2.java) Al dar clic e Source se llega a la vista de cdigo, donde podemos anexar el cdigo correspondiente a cada botn)

1. En la cabecera y primera lnea de cdigo 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[]={"Cdula","Nombres","Apellidos","Telfono","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(); } 5 Daro 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 botn, 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); } } 6 Daro 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); } } } 7 Daro 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 ltimoparmetro en llenar intretorno=pst.executeUpdate(); pst.close(); cn.close(); if(retorno>0){ JOptionPane.showMessageDialog(null,"Actualizacin ejecutada correctamente"); } else{ JOptionPane.showMessageDialog(null," Error "); } activaBotones(true,false,false,false); limpiarObjetos(); } catch(SQLException e){ JOptionPane.showMessageDialog(null," Error "+e.toString()); } }else{ }} } 8 Daro 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); } } }

9 Daro 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(); }

10 Daro 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); } }

11 Daro 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); } }

12 Daro 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: } 13 Daro 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());

14 Daro Vergara

Insercin de Registros en tablas con claves forneas


Supongamos que tenemos una base de datos llamada almacn 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 forneas

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

15 Daro Vergara

Para tomar esos datos, primero los tomar de la tabla donde estos son clave primaria y los leer a travs 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

16 Daro Vergara

Ahora vamos a mostrar la informacin en el primer combo, para ello agregamos a la clase principal 1. En la cabecera y primera lnea de cdigo dentro de la clase frmVentas el siguiente cdigo (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(); }

17 Daro 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

18 Daro 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

19 Daro Vergara

Para probar si el combo est bien, vinculamos este formulario al formulario principal y en un men de esta agregamos el siguiente cdigo 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 20 Daro Vergara

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

cboproducto cbocajero cbomaquina

21 Daro 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); }

22 Daro 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()); } } }

23 Daro 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,"Actualizacin ejecutada correctamente"); } else{ JOptionPane.showMessageDialog(null," Error "); } activaBotones(true,false,false,false); } catch(SQLException e){ JOptionPane.showMessageDialog(null," Error "+e.toString()); } } }

24 Daro 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);

25 Daro Vergara

Realizando Consultas de nuestra base de datos


El siguiente paso es realizar las consultas para nuestro almacn 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 nmero de ventas de cada producto, ordenado de ms 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.

26 Daro 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;

27 Daro Vergara

***********en la clase principal ************** public class ventasporproductos extends javax.swing.JInternalFrame { DefaultTableModel dtm=new DefaultTableModel(); **********En el constructor************** public ventasporproductos() { initComponents(); String titulos[]={"Cdigo","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); } }

28 Daro 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 ]}]]

29 Daro Vergara

Insercin 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 cdigo 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; 30 Daro 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"; 31 Daro 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 imgenes de Mysql


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

32 Daro Vergara

La imagen la vamos a mostrar en el label, este label le asignamos un tamao, 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 = ? "; 33 Daro 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()); } }

34 Daro Vergara

Descargando el software necesario

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


http://www.netbeans.org

Libreras
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 versin de jasperreports es igual a la de iReport

35 Daro Vergara

Instalacin del iReport


Al descomprimir la carpeta, encontramos los siguientes archivos

El paso siguiente es abrir netbeans , nos dirigimos a la pestaa 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 segn el caso, luego en adicionar el plugins y lo buscamos

36 Daro Vergara

Lo seleccionamos y damos clic en install

Diseo del reporte


Creo un paquete para guardar el reporte

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

37 Daro Vergara

Lo llame reportesalmacen

Si todo est bien debemos tener algo parecido

38 Daro 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 contrasea, luego uardamos

39 Daro 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;

40 Daro 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

41 Daro Vergara

Luego aadimos la fecha, para ello agregamos un campo text field y sobre este hacemos clic derecho

42 Daro Vergara

Agregando parmetros al reporte. En el inspector del reporte hacemos clic derecho sobre parameters y adicionamos el nuevo parametro

Lo renombramos

43 Daro Vergara

El parmetro 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};

44 Daro Vergara

El otro parmetro 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 parmetro logo ($P {logo})

Agregar las libreras


Creamos una clase

45 Daro Vergara

Y agregamos el siguiente cdigo 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){ 46 Daro 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(); } } }

47 Daro Vergara

Formulario de acceso al reporte

En este formulario debemos editar el botn generar package almacen; public class parametro extends javax.swing.JInternalFrame { private Reporte jasper; public parametro() { initComponents(); jasper=new Reporte(); } Programamos el botn generar

private void btngenerarActionPerformed(java.awt.event.ActionEvent evt) { long identificacion=Long.parseLong(txtident.getText()); jasper.ejecutarReporte(identificacion); }

48 Daro Vergara

S-ar putea să vă placă și