30/11/09

Leer base de datos con netbeans


Ahora que pudimos manipular la base de datos con la "insercion" de nuevos registros, ahora necesitamos extraer esos registros para poder verlos, modificaremos la clase "persona.java" para añadir la funcion "getDatos()".





Nuestra clase Persona.java que da de esta forma:


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 x = 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();
         x = res.getInt("total");
         res.close();
      }catch(SQLException e){
         System.out.println(e);
      }
      
    Object[][] s = new String[x][2];  
    //realizamos la consulta sql y llenamos los datos en "Object"
      try{    
         PreparedStatement pstm = con.getConnection().prepareStatement("SELECT " +
            " id, Nombre " +
            " 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");
            s[i][0] = estCodigo;            
            s[i][1] = estNombre;            
            i++;
         }
         res.close();
          }catch(SQLException e){
         System.out.println(e);
    }
    return s;
 }
    
}


La nueva funcion GetDatos() esta definida como Object [][], tambien podemos definirla como String[][], la funcion esta dividida en dos partes, la primera encargada de realizar una consulta para conocer el numero de registros existentes y gurdarla en la variable "registros", la segunda parte de la funcion utilizando la variable "registros" crea un objeto con esas dimensiones y realiza la consulta para extraer los datos y colocarlas en la variable "data[][]" que es la que retorna.

el codigo del Main, debe quedar asi:


package contactos;
/**
 * @web http://jc-mouse.blogspot.com/
 * @author Mouse
 */
public class Main {
    
    public static void main(String[] args) {        
        persona p = new persona();               
        Object [][] sc ;
        sc = p.getDatos();
        for(int i=0;i<sc.length ;i++){
            System.out.println("> " + sc[i][0] + " - " + sc[i][1]);            
        }         
        p.con.desconectar();
    }
}

Ejecuta el programa

4 comentarios:

  1. felicitarte por tu pagina sin esta pagina no me aprenderia netbeans, bueno una consulta yo estoy trabajando con PostgreSQL y me funciona todo solo q si cambio la tabla aumentando un campo de tipo int no me ejecuta me sale el siguiente error:org.postgresql.util.PSQLException: ERROR: la columna «fono» es de tipo integer pero la expresión es de tipo character varying. Pienso q por el dato q introducimos como String bueno algun consejo para hacer jalar mi BD en PostgreSQL desde ya gracias

    ResponderEliminar
  2. perdona mi ignorancia y si quiero mostrar todos los campos desde el id, nombre, apP, apM, amal, ysi tuviera mas como seria el Object [][]..??

    ResponderEliminar
  3. ss el de antes vi que ese no era el problema no lo había captado bien,, lo que aora quiero saber es como mandarlos a un jtalbe y estos se muestren??

    ResponderEliminar
  4. para mostrar mas campos de registro modificar Object[][] s = new String[x][?];
    ?= a cantidad de campos a mostrar.
    y añadirlos en :
    PreparedStatement pstm = con.getConnection().prepareStatement("SELECT " +
    " id, Nombre " +
    " FROM persona" +
    " ORDER BY id ");

    tambien en :
    while(res.next()){
    String estCodigo = res.getString("id");
    String estNombre = res.getString("nombre");
    s[i][0] = estCodigo;
    s[i][1] = estNombre;
    por ultimo en el main incrementar en:
    for(int i=0;i " + sc[i][0] + " - " + sc[i][1]);
    }

    ResponderEliminar