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
Ir a la versión completa