Programación General > Java

 Rescatar datos en Java con MySQL

(1/1)

manurodri189:
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 ---package Persistencia; import java.sql.DriverManager;import java.sql.SQLException;import com.mysql.jdbc.Connection; public class Agente {     protected static Agente mInstancia = null;    protected Connection mBD;    protected String driver = "com.mysql.jdbc.Driver";    protected String usuario = "root";    protected String contraseña = "";    protected String url="jdbc:mysql://localhost/Persona/";     protected Agente() throws SQLException, ClassNotFoundException {            Class.forName(driver);            mBD = (Connection) DriverManager.getConnection(url, usuario, contraseña);    }     public static Agente getAgente() throws SQLException, ClassNotFoundException {            if (mInstancia == null)                    mInstancia = new Agente();            return mInstancia;    }     public Connection getBD() throws SQLException {            if(mBD.isClosed())                    mBD = (Connection) DriverManager.getConnection(url, usuario, contraseña);            return mBD;    } } 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 ---package Dominio; import Persistencia.Agente;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.util.logging.Level;import java.util.logging.Logger; public class Persona {    String nombre;      public Persona (){        nombre="";    }     public Persona (String nombre){        this.nombre=nombre;    }     public void setNombre(String n){        nombre=n;    }     public String getNombre(){        return nombre;    }    public void recuperarInformacion() throws ClassNotFoundException, SQLException {        String SQL="SELECT Nombre FROM persona";        String nomAux="";         Connection bd=null;        PreparedStatement p=null;         bd=Agente.getAgente().getBD();        p=bd.prepareStatement(SQL);        p.setString(1,getNombre());        ResultSet r=p.executeQuery();         while(r.next()){            nomAux=r.getString(1);            }         bd.close();         setNombre(""+nomAux);    }} 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 ---private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                               bbddFunciona=true;              try {            per.recuperarInformacion();        } catch (ClassNotFoundException ex) {            Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);        } catch (SQLException ex) {            jTextPane1.setText("Se ha producido un error al conectar con la base de datos.");            bbddFunciona=false;            Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);        }     } A ver si me echais una mano, porque debe de ser una chorrada pero no doy con ello. Muchas gracias.

Salu2

arielb:
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 ---private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                               bbddFunciona=true;              try {            per.recuperarInformacion();            jTextPane1.setText(per.getNombre());        } catch (ClassNotFoundException ex) {            Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);        } catch (SQLException ex) {            jTextPane1.setText("Se ha producido un error al conectar con la base de datos.");            bbddFunciona=false;            Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);        }     } 
Espero te sirva

manurodri189:
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:
Bueno para el caso de guardar un archivo en el un campo blob lo utilizo así


--- Código: Java ---File fichero = new File(nombreArchivo);                         FileInputStream streamEntrada = new FileInputStream(fichero);                         long tamano = fichero.length();                        int tam = (int) tamano;                        byte[] buf = new byte[tam];                        streamEntrada.read(buf);                        BLOB blob = BLOB.createTemporary(con, true, BLOB.DURATION_SESSION);                         OutputStream blobEscribe = blob.getBinaryOutputStream();                        blobEscribe.write(buf);                        blobEscribe.flush();                          PreparedStatement pstmt = null;                          pstmt = con.prepareStatement("INSERT INTO "+                         " ARCHIVOS(CIA,ID,DOCUMENTO,TIPO_ARCHIVO) " +                                    " VALUES(?,?,?,?)");                         pstmt.setString(1, codigo);                        pstmt.setString(2, id);                        pstmt.setBlob(3, blob);                        pstmt.setString(4,tipoArchivo);                                                                         pstmt.executeUpdate();                               con.commit();                        pstmt.close();                        streamEntrada.close();                        file.delete(); 


y para extraerlo después lo hago así



--- Código: Java ---conn.setAutoCommit(false);String cdSelect = "SELECT DOCUMENTO,TIPO_ARCHIVO FROM TABLA WHERE ID = '"+pId+"'";Statement stmt = conn.createStatement();ResultSet rs = stmt.executeQuery(cdSelect);if (rs.next()) {    ruta= directorio+nombreArchivo ;    Blob   blob             = rs.getBlob("DOCUMENTO");    String tipoArchivo      =  rs.getString("TIPO_ARCHIVO");    ruta+="."+tipoArchivo;    File file   = new File(ruta);    file2       = new FileOutputStream(file);     InputStream entrada = blob.getBinaryStream();    int size = (int)blob.length();    byte[] buffer = new byte[size];    int longitud = -1;    while ((longitud = entrada.read(buffer)) != -1)    {      file2.write(buffer, 0, longitud);                    }                                 } else {           mensaje = "No se encontró el registro";  } 

manurodri189:
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

Navegación

[0] Índice de Mensajes

Ir a la versión completa