1
Guardar y Obtener una Imagen Tipo Blob en MySQL + Java
Hola, Comunidad Computrachos
Desearia saber como inserto una imagen (Arreglo de bits) en un campo tipo Blob en MySQL desde java, con el fin de usarla después desde otras terminales de trabajo.

Sentencia SQL para crear la Base de Datos “probando_imagen_blob.sql”:
Conexion con la Base de Datos
package data.amayasystems.com; import java.sql.*; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.JOptionPane; public class Conexion_Base_Datos { String host_Server="localhost"; String user_Server="root"; String pass_Server="clave"; String db="probando_imagen_blob"; boolean entro=false; Statement st=null; Connection con=null; public Conexion_Base_Datos() { try { /* Driver */ String driver = "com.mysql.jdbc.Driver"; System.out.println( "=> Cargando el Driver:" ); try { Class.forName(driver); } catch (ClassNotFoundException ex) { Logger.getLogger(Conexion_Base_Datos.class.getName()).log(Level.SEVERE, null, ex); } System.out.println("OK"); String url = "jdbc:mysql://"+host_Server+"/"+db ; String user = user_Server; String pass = pass_Server; System.out.println( "=> conectando:" ); con = DriverManager.getConnection(url,user,pass); System.out.println("OK"); /* Mostrando Resultados */ st= con.createStatement(); }catch( SQLException x ) { JOptionPane.showMessageDialog(null,"Error Al Conectar\nError: "+x); } } }Frame para Seleccionar y Mostrar las Imagenes
package data.amayasystems.com; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Graphics; import java.awt.Image; import java.awt.Toolkit; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.InputStream; import java.net.URISyntaxException; import java.sql.Blob; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.ImageIcon; import javax.swing.JFileChooser; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.filechooser.FileNameExtensionFilter; import javax.swing.*; import javax.swing.*; public class Probando_Imagen_Blob_MySQL extends JFrame { String direccion_imagen=""; InputStream imagen_obtenida=null; Conexion_Base_Datos conexion_db=null; JPanel arriba=new JPanel(); JPanel centro=new JPanel(); JPanel abajo=new JPanel(); JFileChooser jf = new JFileChooser(); JLabel etiqueta=new JLabel("Seleccione Imagen:"); JTextField direccion=new JTextField(20); JButton boton=new JButton("Buscar"); JButton insertar=new JButton("Guardar"); String imagen=""; JLabel imagen_obtenida_db=new JLabel(); public Probando_Imagen_Blob_MySQL() { super("Probando_Imagen_Blob_MySQL"); setLayout(new BorderLayout()); direccion.setEditable(false); insertar.setEnabled(false); add(arriba,BorderLayout.NORTH); arriba.setLayout(new FlowLayout()); add(centro,BorderLayout.CENTER); centro.setLayout(new FlowLayout()); add(abajo,BorderLayout.SOUTH); abajo.setLayout(new FlowLayout()); centro.add(imagen_obtenida_db); arriba.add(etiqueta); arriba.add(direccion); arriba.add(boton); arriba.add(insertar); boton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { int seleccion = jf.showOpenDialog(null); if (seleccion == JFileChooser.APPROVE_OPTION) { insertar.setEnabled(true); String f=jf.getSelectedFile()+""; imagen=jf.getSelectedFile().getName(); direccion.setText(f); } else { direccion.setText(""); insertar.setEnabled(false); } } }); insertar.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { if (!direccion.getText().isEmpty()) { conexion_db=new Conexion_Base_Datos(); Insertar(imagen); llenar_Datos(imagen); } else { JOptionPane.showMessageDialog(null,"Debe Seleccionar Una Imagen"); } } }); Dimension pantalla=Toolkit.getDefaultToolkit().getScreenSize(); this.setLocation((pantalla.width-600)/2,(pantalla.height-500)/2); setSize(600,500); setVisible(true); } public void llenar_Datos(String x) { ResultSet rs1=null; try { rs1=conexion_db.st.executeQuery("SELECT * FROM imagenes where nombre='"+x+"'"); while(rs1.next()) { Blob campo = rs1.getBlob("imagen_blob"); imagen_obtenida=campo.getBinaryStream(); guardaImagen(imagen_obtenida); imagen_fondo_tomada(); imagen_obtenida_db.setIcon(imagen_fondo_tomada()); } }catch(SQLException e) { System.out.println("ERROR DOS "+e); } } private ImageIcon imagen_fondo_tomada() { ImageIcon icono=new ImageIcon(direccion_imagen); return icono; } public int Insertar(String dir_x) { String consulta=""; int res=-1; try { consulta="INSERT INTO imagenes (`id_imagen`, `nombre`, `imagen_blob`) VALUES (?, ?, ?);"; PreparedStatement pre=null; try { pre = (PreparedStatement) conexion_db.con.prepareStatement(consulta); } catch (SQLException ex) { System.out.println("Error "+ex); } pre.setInt(1, 0); pre.setString(2,imagen); FileInputStream fin = null ; File archivo_imagen=null; archivo_imagen=new File(direccion.getText()); try { fin = new FileInputStream(archivo_imagen); } catch (FileNotFoundException ex) { System.out.println("Error "+ex); } pre.setBinaryStream(3, fin, (int) archivo_imagen.length()); res=pre.executeUpdate(); } catch (SQLException ex) { System.out.println("Error "+ex); res=-1; } return res; } private String getArchivo() { long time=System.currentTimeMillis(); Date fecha=new Date(time); int dia=fecha.getDay(); int mes=fecha.getMonth(); int anho=fecha.getYear(); int hora=fecha.getHours(); int minutos=fecha.getMinutes(); int segundos=fecha.getSeconds(); java.util.Date utilDate = new java.util.Date(); java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime()); return "Captura"+"_"+sqlDate+"_"+hora+"-"+minutos+"-"+segundos; } public void guardaImagen(InputStream imagenBuffer) { String dir=System.getProperty("user.dir")+"\\Fotos"+"\\"+getArchivo()+".jpg"; direccion_imagen=dir; try { File fichero = new File(dir); BufferedInputStream in = new BufferedInputStream(imagenBuffer); BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(fichero)); byte[] bytes = new byte[8096]; int len = 0; while ( (len = in.read( bytes ))> 0 ) { out.write( bytes, 0, len ); } out.flush(); out.close(); in.close(); } catch(Exception e) { } } public static void main(String args[]) { new Probando_Imagen_Blob_MySQL(); } }Pueden Descargar el proyecto en Eclipse:
http://data.amayasystems.com/Computrachos.com.rar
Fue útil la respuesta?
LikeDislike