1/12/09

Agregar registros a base de datos con netbeans

Continuando con nuestro mini-proyecto, ahora llego la hora de agregar/eliminar/actualizar registros a la base de datos de forma visual.


Nuestro proyecto se llama "contactos", las clases que utilizamos son conectate.java y persona.java, la base de datos (dbcontactos) y tabla (persona) que usamos las puedes ver aqui.

Clase persona.java

package contactos;
import java.sql.*;
/**
 * @web http://jc-mouse.blogspot.com/
 * @author mouse
 */
public class persona {
  conectate con;
  
  public persona (){
    con = new conectate();
  } 
  
  /*Añade un nuevo registro*/
   public void NuevaPersona(String name, String ap, String am, String mail){
       try {            
            PreparedStatement pstm = con.getConnection().prepareStatement("insert into " + 
                    "persona(Nombre, appPaterno, appMaterno, mail) " +
                    " values(?,?,?,?)");            
            pstm.setString(1, name);
            pstm.setString(2, ap);
            pstm.setString(3, am);                        
            pstm.setString(4, mail);                        
            pstm.execute();
            pstm.close();            
         }catch(SQLException e){
         System.out.println(e);
      }
   }

 /*obtenemos todos los datos de la tabla*/
 public Object [][] getDatos(){
      int registros = 0;
      //obtenemos la cantidad de registros existentes en la tabla
      try{         
         PreparedStatement pstm = con.getConnection().prepareStatement("SELECT count(1) as total FROM persona ");
         ResultSet res = pstm.executeQuery();
         res.next();
         registros = res.getInt("total");
         res.close();
      }catch(SQLException e){
         System.out.println(e);
      }
      
    Object[][] data = new String[registros][5];  
    //realizamos la consulta sql y llenamos los datos en "Object"
      try{    
         PreparedStatement pstm = con.getConnection().prepareStatement("SELECT " +
            " id, Nombre, appPaterno, appMaterno, mail " +
            " FROM persona" +
            " ORDER BY id ");
         ResultSet res = pstm.executeQuery();
         int i = 0;
         while(res.next()){
            String estCodigo = res.getString("id");
            String estNombre = res.getString("nombre");
            String estpaterno = res.getString("appPaterno");
            String estmaterno = res.getString("appMaterno");
            String estmail = res.getString("mail");
            data[i][0] = estCodigo;            
            data[i][1] = estNombre;            
            data[i][2] = estpaterno;            
            data[i][3] = estmaterno;            
            data[i][4] = estmail;            
            i++;
         }
         res.close();
          }catch(SQLException e){
         System.out.println(e);
    }
    return data;
 }    
}

Empezemos:

Paso 1: crea un jFrame "tablaform" y coloca los siguientes controles, renombralos como se ve en la imagen de abajo. ¡cuidado con las mayusculas y minusculas!

Nos dirigimos a Source (su codigo) y realizaremos lo siguiente;

Paso 2:  declara import javax.swing.table.DefaultTableModel; ya sabes donde

Paso 3: coloca estas lineas de codigo.


 /**
     * @param args the command line arguments
     */
    persona p= new persona();     
    Object[][] dtPer; 
    int fila = -1;

Paso 4: Añade estos dos metodos, el primero updateTabla(), actualiza el objeto tabla cada vez que se lo invoca,  el metodo nuevo(), su funcion es la de limpiar los jTextFields para añadir nuevos datos.


 private void updateTabla(){             
        String[] columNames = {"id","Nombre","ap. Paterno","ap. Materno", "E-Mail"};  
        // se utiliza la funcion
        dtPer = p.getDatos();
        // se colocan los datos en la tabla
        DefaultTableModel datos = new DefaultTableModel(dtPer,columNames);                        
        tabla.setModel(datos); 
    }
    
    private void nuevo(){
        txtname.setText("");
        txtpaterno.setText("");
        txtmaterno.setText("");
        txtmail.setText("tu_correo@hotmail");
    }


Paso 5: añade el evento WindowOpenend al jFrame, el evento ActionPerformed a los objetos jButton y el evento MouseClicked al objeto jTable, añade el codigo que se ve abajo


private void formWindowOpened(java.awt.event.WindowEvent evt) {                                  
        updateTabla();   
        nuevo();
    }                                 

    private void cmdRegistroActionPerformed(java.awt.event.ActionEvent evt) {
        String name = txtname.getText();
        String pat = txtpaterno.getText();
        String mat = txtmaterno.getText();      
        String mail = txtmail.getText();
        p.NuevaPersona(name, mat, pat, mail);        
        updateTabla(); 
    }

    private void cmdNuevoActionPerformed(java.awt.event.ActionEvent evt) {
        nuevo();
    }

    private void tablaMouseClicked(java.awt.event.MouseEvent evt) {
        fila = tabla.rowAtPoint(evt.getPoint());                 
         if (fila > -1){                          
             txtname.setText(String.valueOf(tabla.getValueAt(fila, 1)));
             txtpaterno.setText(String.valueOf(tabla.getValueAt(fila, 2)));
             txtmaterno.setText(String.valueOf(tabla.getValueAt(fila, 3)));
             txtmail.setText(String.valueOf(tabla.getValueAt(fila, 4)));
         }
    }

Paso 6: Compila y ejecuta el proyecto

4 comentarios:

  1. MUCHAS GRACIAS!! Hay algunos detalles pero gracias!

    ResponderEliminar
  2. muchisimas gracias mouse eres el mejor men gracias por compartirnos tantos proyectos...
    amigo mouse y como se puede actualizar un campo de una base de datos sql osea cuando selecciono un item de un JCombobox actualizar dicho campo a la base de datos?? te agrezco inmensamente por su atencion.

    ResponderEliminar
  3. sale error en "p.NuevaPersona(name, mat, pat, mail);" y en "dtPer = p.getDatos();" ayuda por favor

    ResponderEliminar
  4. hola necesito ayuda porfa!! como hago para almacenar un txt en mysql desde netbeans...

    ResponderEliminar