Hay infinidad de ejemplos de cómo guardar una imagen a base de datos con JDBC, y cómo recuperarla.
Pues esta vez mostraré un ejemplo usando JPA.
Supongamos que nuestra clase entidad tiene una propiedad llamada
Para guardar una imagen (supongamos una que esté en el disco), debemos realizar lo siguiente:
Ahora, para recuperar el contenido haremos que se muestre el contenido en un JFrame:
Después haré un ejemplo usando JTable, y - si puedo - usando ICEfaces.
Pues esta vez mostraré un ejemplo usando JPA.
Supongamos que nuestra clase entidad tiene una propiedad llamada
imagen
que es donde se guardará la imagen. Esta propiedad debe declararse así:@Lob @Column(name = "imagen") private byte[] imagen;
Para guardar una imagen (supongamos una que esté en el disco), debemos realizar lo siguiente:
Entidad i = new Entidad(); // nuestra entidad File f = new File("D:/Imagen006.jpg"); //asociamos el archivo fisico InputStream is = new FileInputStream(f); //lo abrimos. Lo importante es que sea un InputStream byte[] buffer = new byte[(int) f.length()]; //creamos el buffer int readers = is.read(buffer); //leemos el archivo al buffer i.setImagen(buffer); //lo guardamos en la entidad em.persist(i); //y lo colocamos en el EntityManager
Ahora, para recuperar el contenido haremos que se muestre el contenido en un JFrame:
Entidad ent = em.find(Entidad.class, new Integer(1)); //ubicamos una entidad Image image=new ToolkitImage(new ByteArrayImageSource(ent.getImagen())); //lo convertimos a Image JLabel label=new JLabel(new ImageIcon(image)); //creamos un JLabel con la imagen como icono JFrame frame=new JFrame("imagen"); //creamos el jframe frame.setLayout(new BorderLayout()); //.. con un Layout clasico frame.add(label,BorderLayout.CENTER); //.. agregamos el JLabel en el centro frame.pack(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); //y lo mostramos
Después haré un ejemplo usando JTable, y - si puedo - usando ICEfaces.