• Sábado 4 de Mayo de 2024, 09:44

Autor Tema:  Rescatar datos en Java con MySQL  (Leído 2979 veces)

manurodri189

  • Miembro MUY activo
  • ***
  • Mensajes: 117
    • Ver Perfil
Rescatar datos en Java con MySQL
« en: Sábado 7 de Febrero de 2009, 15:03 »
0
A ver si me podeis echar una mano en  esto, es un ejemplo sencillo pero no doy con ello. Gracias

Ahora mismo estoy usando EasyPHP y Netbeans.

Me he puesto manos a la obra, para ver como funciona, con un ejemplo muy sencillito. Un boton, y un jText, cuando pinche el boton rescato los datos de la BBDD. La BBDD tiene una tabla, Persona, con un campo Nombre, con 2 filas, pepe y juan.

Bien es un ejemplo sencillito, para ir tocando poco a poco y ver como funciona.

El caso es que no se rescatar los datos de la BBDD y tratarlo como variables de java.

He hecho esta estructura de paquetes:



La clase Agente.Java, es la que hace la conexion y creo que está bien, la pongo aqui:

Código: Text
  1. package Persistencia;
  2.  
  3. import java.sql.DriverManager;
  4. import java.sql.SQLException;
  5. import com.mysql.jdbc.Connection;
  6.  
  7. public class Agente {
  8.  
  9.     protected static Agente mInstancia = null;
  10.     protected Connection mBD;
  11.     protected String driver = "com.mysql.jdbc.Driver";
  12.     protected String usuario = "root";
  13.     protected String contraseña = "";
  14.     protected String url="jdbc:mysql://localhost/Persona/";
  15.  
  16.     protected Agente() throws SQLException, ClassNotFoundException {
  17.             Class.forName(driver);
  18.             mBD = (Connection) DriverManager.getConnection(url, usuario, contraseña);
  19.     }
  20.  
  21.     public static Agente getAgente() throws SQLException, ClassNotFoundException {
  22.             if (mInstancia == null)
  23.                     mInstancia = new Agente();
  24.             return mInstancia;
  25.     }
  26.  
  27.     public Connection getBD() throws SQLException {
  28.             if(mBD.isClosed())
  29.                     mBD = (Connection) DriverManager.getConnection(url, usuario, contraseña);
  30.             return mBD;
  31.     }
  32.  
  33. }
  34.  
En la clase persona es la que se supone que debe rescatar los datos de la BBDD, no? Pues lo he hecho asi:

Código: Text
  1. package Dominio;
  2.  
  3. import Persistencia.Agente;
  4. import java.sql.Connection;
  5. import java.sql.PreparedStatement;
  6. import java.sql.ResultSet;
  7. import java.sql.SQLException;
  8. import java.util.logging.Level;
  9. import java.util.logging.Logger;
  10.  
  11. public class Persona {
  12.     String nombre;
  13.  
  14.  
  15.     public Persona (){
  16.         nombre="";
  17.     }
  18.  
  19.     public Persona (String nombre){
  20.         this.nombre=nombre;
  21.     }
  22.  
  23.     public void setNombre(String n){
  24.         nombre=n;
  25.     }
  26.  
  27.     public String getNombre(){
  28.         return nombre;
  29.     }
  30.  
  31.    public void recuperarInformacion() throws ClassNotFoundException, SQLException {
  32.         String SQL="SELECT Nombre FROM persona";
  33.         String nomAux="";
  34.  
  35.         Connection bd=null;
  36.         PreparedStatement p=null;
  37.  
  38.         bd=Agente.getAgente().getBD();
  39.         p=bd.prepareStatement(SQL);
  40.         p.setString(1,getNombre());
  41.         ResultSet r=p.executeQuery();
  42.  
  43.         while(r.next()){
  44.             nomAux=r.getString(1);
  45.             }
  46.  
  47.         bd.close();
  48.  
  49.         setNombre(""+nomAux);
  50.     }
  51. }
  52.  
El método recuperar información es el que no me cuadra, pero creo que está bien de todos modos.

Y el metodo del botón para que me lo muestre en el jText es el siguiente, que este creo que es el que realmente tengo problemas:

Código: Text
  1. private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                        
  2.        bbddFunciona=true;
  3.      
  4.         try {
  5.             per.recuperarInformacion();
  6.         } catch (ClassNotFoundException ex) {
  7.             Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
  8.         } catch (SQLException ex) {
  9.             jTextPane1.setText("Se ha producido un error al conectar con la base de datos.");
  10.             bbddFunciona=false;
  11.             Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
  12.         }
  13.  
  14.     }
  15.  
A ver si me echais una mano, porque debe de ser una chorrada pero no doy con ello. Muchas gracias.

Salu2



arielb

  • Moderador
  • ******
  • Mensajes: 771
  • Nacionalidad: pa
    • Ver Perfil
    • http://coder-pa.blogspot.com
Re: Rescatar datos en Java con MySQL
« Respuesta #1 en: Viernes 20 de Febrero de 2009, 16:19 »
0
Hola, a lo rápido no veo error en tú código, solo que falta una linea al invocar el método de recuperar información.
Código: Java
  1. private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                        
  2.        bbddFunciona=true;
  3.      
  4.         try {
  5.             per.recuperarInformacion();
  6.             jTextPane1.setText(per.getNombre());
  7.         } catch (ClassNotFoundException ex) {
  8.             Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
  9.         } catch (SQLException ex) {
  10.             jTextPane1.setText("Se ha producido un error al conectar con la base de datos.");
  11.             bbddFunciona=false;
  12.             Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
  13.         }
  14.  
  15.     }
  16.  

Espero te sirva
"Porque de tal manera amó Dios al mundo que dio a su hijo unigénito para que todo aquél que en él crea no se pierda mas tenga vida eterna"
Juan 3:16

http://coder-pa.blogspot.com

manurodri189

  • Miembro MUY activo
  • ***
  • Mensajes: 117
    • Ver Perfil
Re: Rescatar datos en Java con MySQL
« Respuesta #2 en: Viernes 20 de Febrero de 2009, 16:38 »
0
Gracias tio, ya conseguí que funcionase.

Ahora me falta tratar objetos blob con java, me puedes pasar algún tutorial o algún método para ver como se hace? Gracias

Salu2



arielb

  • Moderador
  • ******
  • Mensajes: 771
  • Nacionalidad: pa
    • Ver Perfil
    • http://coder-pa.blogspot.com
Re: Rescatar datos en Java con MySQL
« Respuesta #3 en: Viernes 20 de Febrero de 2009, 17:20 »
0
Bueno para el caso de guardar un archivo en el un campo blob lo utilizo así

Código: Java
  1. File fichero = new File(nombreArchivo);
  2.  
  3.                         FileInputStream streamEntrada = new FileInputStream(fichero);
  4.  
  5.                         long tamano = fichero.length();
  6.                         int tam = (int) tamano;
  7.                         byte[] buf = new byte[tam];
  8.                         streamEntrada.read(buf);
  9.                         BLOB blob = BLOB.createTemporary(con, true, BLOB.DURATION_SESSION);
  10.  
  11.                         OutputStream blobEscribe = blob.getBinaryOutputStream();
  12.                         blobEscribe.write(buf);
  13.                         blobEscribe.flush();
  14.  
  15.                          PreparedStatement pstmt = null;
  16.  
  17.                          pstmt = con.prepareStatement("INSERT INTO "+
  18.                          " ARCHIVOS(CIA,ID,DOCUMENTO,TIPO_ARCHIVO) " +
  19.                                     " VALUES(?,?,?,?)");
  20.  
  21.                         pstmt.setString(1, codigo);
  22.                         pstmt.setString(2, id);
  23.                         pstmt.setBlob(3, blob);
  24.                         pstmt.setString(4,tipoArchivo);
  25.                                                  
  26.                         pstmt.executeUpdate();      
  27.                         con.commit();
  28.                         pstmt.close();
  29.                         streamEntrada.close();
  30.                         file.delete();
  31.  



y para extraerlo después lo hago así


Código: Java
  1. conn.setAutoCommit(false);
  2. String cdSelect = "SELECT DOCUMENTO,TIPO_ARCHIVO FROM TABLA WHERE ID = '"+pId+"'";
  3. Statement stmt = conn.createStatement();
  4. ResultSet rs = stmt.executeQuery(cdSelect);
  5. if (rs.next()) {
  6.     ruta= directorio+nombreArchivo ;
  7.     Blob   blob             = rs.getBlob("DOCUMENTO");
  8.     String tipoArchivo      =  rs.getString("TIPO_ARCHIVO");
  9.     ruta+="."+tipoArchivo;
  10.     File file   = new File(ruta);
  11.     file2       = new FileOutputStream(file);
  12.     InputStream entrada = blob.getBinaryStream();
  13.     int size = (int)blob.length();
  14.     byte[] buffer = new byte[size];
  15.     int longitud = -1;
  16.     while ((longitud = entrada.read(buffer)) != -1)
  17.     {
  18.       file2.write(buffer, 0, longitud);                
  19.     }                                
  20.  } else {
  21.            mensaje = "No se encontró el registro";
  22.  }
  23.  
"Porque de tal manera amó Dios al mundo que dio a su hijo unigénito para que todo aquél que en él crea no se pierda mas tenga vida eterna"
Juan 3:16

http://coder-pa.blogspot.com

manurodri189

  • Miembro MUY activo
  • ***
  • Mensajes: 117
    • Ver Perfil
Re: Rescatar datos en Java con MySQL
« Respuesta #4 en: Viernes 20 de Febrero de 2009, 17:39 »
0
Gracias, en unos dias le echo un ojo, porque ahora estoy un poco liadillo con otras cosas, asi que luego te cuento como fue, y te comento si tengo alguna duda y demás. Muchas gracias por estar atento al hilo.

Salu2