Obtener imagenes desde una base datos


Hace algún tiempo escribí el post JFrame con Imagen de Fondo y surgieron varios comentarios en donde se preguntaban ¿cómo obtener, desde una base de datos, las imágenes? Hace una semana respondí a ésta pregunta, pero creo que es necesario hacer un nuevo post con éste tema.

Imaginemos que tenemos una base de datos que contiene una tabla llamada IMAGENES, que tiene una columna tipo BLOB (denominada FOTO) y un identificador (denominado ID). Para consultar desde la base datos la foto podemos hacer la siguiente consulta:

ResultSet rs = stmt.executeQuery(«SELECT FOTO FROM IMAGENES WHERE ID = 1»);

rs.next(); //Esto hacía falta

byte[] img = rs.getBytes(«FOTO»);

Debido a que un campo tipo BLOB almacena información en formato binario utilizamos un arreglo de bytes para leerlo. Hasta aquí he leído desde la base de datos una imagen con bytes, pero ¿qué debo hacer para convertirla en imagen y agregarla a un botón?

Para responder a ésta pregunta utilizaré un código que encontré en un artículo publicado en el sitio oficial de NetBeansEnd-to-End Web Service Creation and Consumption in NetBeans IDE 6.0

private Image getImage(byte[] bytes, boolean isThumbnail) throws IOException {

ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
Iterator readers = ImageIO.getImageReadersByFormatName(”jpeg”);
ImageReader reader = (ImageReader) readers.next();
Object source = bis; // File or InputStream
ImageInputStream iis = ImageIO.createImageInputStream(source);
reader.setInput(iis, true);
ImageReadParam param = reader.getDefaultReadParam();
if (isThumbnail) {

param.setSourceSubsampling(4, 4, 0, 0);

}
return reader.read(0, param);

}
El código anterior recibe como uno de sus parámetros, un arreglo de bytes y devuelve un objeto tipo Image. Entonces se podría completar el código así:

Image imagen = getImage(img, false);
Icon icon = new ImageIcon(imagen);
btnBoton.setIcon(icon);

Y con ésto tendríamos un botón con un icono que se obtuvo de una base de datos. Espero que sea de su ayuda.

Powered by ScribeFire.

89 comentarios en “Obtener imagenes desde una base datos

  1. Para intentar mejorar el rendimiento y no cargar tanto la memoria, se podria mirar si va mejor usar un BufferedStream en vez de un Stream normal, y conectar directamente el Stream que viene de la BDD con rs.getBinaryStream(1) o rs.getBlob(1).getBinaryStream(), en vez de trasegar el byte[] completo.

    S!

    1. Buen día amigos aquí les dejo otra solución en mi base de datos de tipo oracle 11g, se almacenan 4 campos id, marca,logo_Grande,logo_chico. como podran ver en mi base se almacenan ambos logos en tipo blob y quiero obtenerlos en una ruta fisica

      Base de Datos CREACIÓN:

      CREATE TABLE IMAGENES_1
      (
      ID_MARCA_1 NUMBER(17,0)NULL,
      MARCA VARCHAR2 (70)NULL,
      LOGO_GRANDE BLOB NULL,
      LOGO_CHICO BLOB NULL
      );

      –DEFINIMOS NUESTRA LLAVE PRIMARIA
      ALTER TABLE IMAGENES_1 ADD (
      CONSTRAINT PKID_MARCA_1 PRIMARY KEY (ID_MARCA_1)
      );

      Código JAVA (Primer paso crear la conexión no olviden cargar el driver ojdbc14 )

      import java.sql.Connection;
      import java.sql.DriverManager;
      import java.sql.PreparedStatement;
      import java.sql.SQLException;

      public class ConnectionFactory {

      String url = «jdbc:oracle:thin:@localhost:1522:xe»;
      String userName = «SYSTEM»;
      String password = «SYSTEM»;

      Connection conn = null;

      public ConnectionFactory()
      {

      try
      {

      Class.forName(«oracle.jdbc.driver.OracleDriver»);

      conn = DriverManager.getConnection(url,userName,password);

      if (conn!=null)
      {
      System.out.println(«Conexión a base de datos Exitosa»);
      }
      }
      catch(SQLException e)
      {
      System.out.println(«Error al intentar conectar a la base de datos…: » + e);
      }
      catch(ClassNotFoundException e)
      {
      System.out.println(e);
      }
      catch(Exception e)
      {
      System.out.println(e);
      }
      }

      public Connection getConnection() throws Exception {

      try {

      DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
      conn = DriverManager.getConnection(url, userName, password);
      conn.setAutoCommit(false);

      //System.out.println(«Conexion exitosa»);

      } catch (SQLException e) {
      e.printStackTrace();
      //System.out.println(«Conexion fallida»);
      throw e;
      }

      return conn;

      }

      public void desconectar()
      {
      conn = null;
      }

      /*Metodo para cerrar la conexion*/
      public static void close(java.sql.Connection conn) {
      if(conn != null){
      try {
      conn.close();
      } catch (Exception ignored) { }
      }
      }

      /*Metodo para cerrar el PreparedStatement*/
      public static void close(PreparedStatement pstm) {
      if(pstm != null){
      try {
      pstm.close();
      } catch (Exception ignored) { }
      }
      }

      /*Metodo para cerrar el rollback*/
      public static void rollback(Connection conn){
      try {
      ((java.sql.Connection) conn).rollback();
      } catch (Exception e) {
      e.printStackTrace();
      }
      }

      /*Metodo para cerrar el commit*/
      public static void commit(Connection conn){
      try {
      ((java.sql.Connection) conn).commit();
      } catch (Exception e) {
      e.printStackTrace();
      }

      }
      }

      Código JAVA (Segundo paso declarar nuestras variables y crear sus metos getter y setter)

      public class RecuperadorBLOB_VO {

      private String id;
      private String marca;
      private byte ImagenGrande[];
      private byte ImagenChico[];

      public String getId() {
      return id;
      }
      public void setId(String id) {
      this.id = id;
      }
      public String getMarca() {
      return marca;
      }
      public void setMarca(String marca) {
      this.marca = marca;
      }

      public byte[] getImagenGrande() {
      return ImagenGrande;
      }
      public void setImagenGrande(byte[] imagenGrande) {
      ImagenGrande = imagenGrande;
      }
      public byte[] getImagenChico() {
      return ImagenChico;
      }
      public void setImagenChico(byte[] imagenChico) {
      ImagenChico = imagenChico;
      }
      }

      Código JAVA (Tercer paso crear nuestra clase DAO esta clase lo único que hace es consultar en base de datos)

      import mx.com.Connection.ConnectionFactory;
      import mx.com.Vo.RecuperadorBLOB_VO;

      public class RecuperadorBLOB_DAO {

      public List find(RecuperadorBLOB_VO filter) throws Exception{

      List respuesta = new ArrayList();
      RecuperadorBLOB_VO objVO = null;

      Connection conn = null;
      PreparedStatement pstm = null;
      ResultSet rs = null;

      StringBuffer query = new StringBuffer();
      query.append(«SELECT * FROM IMAGENES_1 WHERE 1=1»);

      try {

      if(filter != null){

      if(filter.getId() != null && !filter.getId().trim().equals(«»)){
      query.append(«AND ID_MARCA_1 = ‘» + filter.getId().trim() + «‘ «);
      }
      if(filter.getMarca() != null && !filter.getMarca().trim().equals(«»)){
      query.append(«AND MARCA = ‘» + filter.getMarca().trim() + «‘ «);
      }
      }

      ConnectionFactory conex = new ConnectionFactory();
      conn = conex.getConnection();

      pstm = conn.prepareStatement(query.toString());
      rs = pstm.executeQuery();

      while (rs.next()){

      objVO = new RecuperadorBLOB_VO();

      objVO.setId(rs.getString («ID_MARCA_1» ));
      objVO.setMarca(rs.getString («MARCA» ));
      Blob imageBlob = rs.getBlob («LOGO_GRANDE» );
      Blob imBlob = rs.getBlob («LOGO_CHICO» );

      byte binaryStream[] = imageBlob.getBytes(1, (int) imageBlob.length());
      objVO.setImagenGrande(binaryStream);

      byte binary[] = imBlob.getBytes(1, (int) imBlob.length());
      objVO.setImagenChico(binary);

      for (byte b : binaryStream) {
      System.out.println(b);
      }

      respuesta.add(objVO);

      }

      conn.commit();

      } catch (SQLException e) {

      conn.rollback();
      e.printStackTrace();

      } catch (Exception e) {

      System.out.println(«Ocurrio un error en ImagenGuardaVo.lista»);
      conn.rollback();
      e.printStackTrace();

      } finally {

      ConnectionFactory.close(pstm);
      ConnectionFactory.close(conn);

      }

      return respuesta;

      }

      }

      Código JAVA (Cuarto paso crear nuestra clase BNS la que contiene la logica de como va a obtener las imagenes y en que ruta las va a guardar)

      import java.io.File;
      import java.io.FileOutputStream;
      import java.util.List;

      import mx.com.Dao.RecuperadorBLOB_DAO;
      import mx.com.Vo.RecuperadorBLOB_VO;

      public class RecuperadorBLOB_BSN {

      public static List alumno(RecuperadorBLOB_VO filtro) throws Exception{

      List lista = null;
      FileOutputStream fos = null;
      FileOutputStream fos2 = null;

      try {

      RecuperadorBLOB_DAO alumnoDAO = new RecuperadorBLOB_DAO();
      lista = alumnoDAO.find(filtro);
      System.out.println(«resgitros encontrados: » + lista.size());

      for(int i = 0; i<lista.size(); i++){

      RecuperadorBLOB_VO alumno = lista.get(i);

      System.out.println("ID "+alumno.getId() + alumno.getImagenGrande());

      String pathname = ("C:/Users/jcopcago/Downloads/ImagenGrande/"+alumno.getId() +"_" + alumno.getMarca()+ ".png");
      File file = new File(pathname);
      byte is[] = alumno.getImagenGrande();
      byte[] array = new byte[1]; // buffer temporal de lectura.
      fos = new FileOutputStream(file);
      fos.write(is);

      String pathname2 = ("C:/Users/jcopcago/Downloads/ImagenChico/"+alumno.getId() +"_" + alumno.getMarca()+ ".png");
      File file2 = new File(pathname2);
      byte is2[] = alumno.getImagenChico();
      byte[] array2 = new byte[1]; // buffer temporal de lectura.
      fos2 = new FileOutputStream(file2);
      fos2.write(is2);

      System.out.println("El Id es :" + alumno.getId() + " " + alumno.getMarca() + " " + alumno.getImagenGrande());

      }
      alumnoDAO.find(filtro);

      } catch (Exception e) {

      e.printStackTrace();
      }
      finally
      {
      fos.close();
      fos2.close();
      }

      return lista;
      }
      }

      Código JAVA (Quinto paso crear nuestra clase principal para poder ejecutar nuestro programa)

      import java.util.List;

      import mx.com.Business.RecuperadorBLOB_BSN;
      import mx.com.Vo.RecuperadorBLOB_VO;

      public class RecuperadorBLOB_CONTROLLER {

      public static void main(String[] args) throws Exception {

      try {

      } catch (Exception e) {
      e.printStackTrace();
      }

      System.out.println("Comienzo de ejecucion");
      RecuperadorBLOB_VO imagen = new RecuperadorBLOB_VO();

      List imagenes = RecuperadorBLOB_BSN.alumno(imagen);

      }

      }

  2. dime y porke no lo haces desde una bd sql
    por desde mysql o acaso no se puede guardar
    una imagen desde java y sql porke se ke se puede desde .net y c# mi pregunta es porke desde java no ?

  3. Buen aporte.

    Una forma mas corta de convertir el array de bytes en una Image, es pasando el array de bytes al contructor de la clase javax.swing.ImageIcon, luego si se quiere, se puede extraer la Image con el metodo getImage de la clase ImageIcon.

  4. Hola sdarknot,
    Te comento que el tipo de dato BLOB no es exclusivo de MySQL, también lo puedes encontrar en Oracle. Y creo que en SQL Server el tipo de dato es binary, aunque no he utilizando dicha base de datos en mucho tiempo.

  5. hola man :
    mira en sql server hay un tipo de dato
    que binario pero blod no hay ,del tipo blod lo he visto en mysql pero se ke tambiem hay en oracle pero es muy pesado por eso no he trabajo con eso , de todas maneras voy a probar con sql y el tipo de dato binary de todos modos gracias por responder

    ¯`·.¸> §Ðâr|<ñ0T <.·´¯

  6. Hola sdarknot.

    Mira yo he trabajado con V studio 2005 en VB y C sharp, y SQl Server 2005 y el tipo de dato que debes utilizar es Image, espero te sirva de ayuda, tengo algunos ejemplos y ligas que te puedo mandar para que te des un ejemplo. te dejo mi correo: chilango_221@hotmail.com, puedo ayudarte a resolver dudas.

    Salu2

  7. BASE DE DATOS : ACCESS
    IDE : NETBEANS 5.5.1

    1RA PRGTA .- ¿ Y COMO SERIA PARA EXTRAER UNA IMAGEN DE ACCESS CUYO CAMPO ES DE TIPO OLE Y LA IMGN ES DE BMP ?

    2DA PRGTA .- ¿ DONDE PODRIA ALMACENAR LA IMAGEN ? ( EN QE ME RECOMIENDAN )

    Gracias de antemano. Salu2.

  8. Hola josh,

    Trataré de responder:

    1era. Pregunta:
    No he hecho pruebas con Access, pero te recomiendo que almacenes la información la imagen como bits, desconozco si Access posee algún tipo así. El código que muestro en este post debería funcionar.

    2da. Pregunta:
    Depende de tú aplicación, pero si tienes muchas, muchas imágenes, mejor y las almacenas en algún directorio y el base almacena el nombre y su extesión de tal forma que puedas ubicarlas.

    Saludos y me avisas cualquier avance.

  9. Muy bn Jorge grcs
    lo intentare hacer. Haber si me resulta ya stare avisandote y si necesito ayuda ps volvere a escribir.
    Nos vemos, Sldos.

  10. Yo uso una carpeta aparte, que contiene las fotos o imagenes y en la BD solo tengo los nombres de estas, como tipo string fotos o imagenes, y lo unico que hago es llamar al nombre y esta jalara a la imagen de la carpeta,

    Saludos.

  11. yo tengo un problema uso servlets y sql server 2005, una vez que tengo ya la imagen en un arreglo de bytes(por ejemplo 28939 campos de bytes) la inserto a la tabla, y cuando extraigo el campo de la tabla solo me devuelve muy pocos (por ejemplo de los 28939 que inserte solo devuelve 9) no se si el problema sea a la hora de insertar o a la hora de recuperarlos no se si alguien me úeda ayudar con eso.

    -asi inserto
    insert.executeUpdate(«insert into datos values(» + ID + «, ‘» + Name + «‘, ‘» + APP + «‘, ‘» + Address + «‘,» + Phone + «, ‘» + IMG + «‘)»);

    ***IMG ES EL ARRELGO DE BYTES***

    -asi extraigo

    ResultSet result = select.executeQuery(«select * from datos where id = » + Id);

    while (result.next()) {
    RecoveryVector.setRecovery(result.getString(«id»), result.getString(«name»), result.getString(«app»), result.getString(«address»), result.getString(«phone»), result.getBytes(«image»));
    }

  12. Podrias ser tan amable de poner tambien la forma de insertar la imagen en la bd. Uso el codigo que presentas y me dice que el byte[] que mando a la funcion no es una imagen.

  13. Podrias ser tan amable de poner tambien la forma de insertar la imagen en la bd. Uso el codigo que presentas y me dice que el byte[] que mando a la funcion no es una imagen.

  14. Hola. No sé si alguien me pudiera ayudar a resolver un detallito que tengo al respecto. Estoy trabajando con JSF (JavaServer Faces, específicamente la implementación MyFaces de Apache) & MySQL. Ya logro subir la imagen a la BD y todo el rollo. El detalle es cuando listo los datos con su imagen correspondiente (p. ej, una lista de maestros y sus correspondientes fotos), en IE sí funciona, pero en Opera y Mozilla NO : |

    He leído que Opera tiene unos «detalles» respecto al tipo de codificación (base64) y al parecer por ahí podría estar el problema. Mmm… me urge si alguien me pudiera echar una ayudadita al respecto ya que es para mi tesis y estoy contra tiempo.

    El tutorial y ejemplo que seguí está en: http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=uploadJSF.

    De antemano muchas gracias…

  15. Hola estoy desarrollando una pagina web en la plataforma del Netbeans con struct y mi base de datos mysql quiero insertar una imagen por cada registro que ingreso a mi base de datos pero no se como insertar la imagen desde mi ordenador no se si me puedas ayudar te lo agradeceria mucho

  16. hola man solo una pregunta como obtengo un InputStream desde una Image en java porfa alguna respuesta a mi correo o a este blog porfavor desde ya gracias

  17. para guardar una imagen necesito un File para capturar el url de la imagen o archivo y luego necesito un InputStream(File) al que se le pasa el File pero lo que kiero es primero Obtener el url modificar la imagen hacer un tumbnail y luego recien pasarcelo al InputStream como hago eso ?

  18. Hola Jorge:

    Bueno te comento que ya implemente el codigo pero me marca un error despues del resultset es decir yo pongo el metodo para convertir de byte a imagen despues hago la consulta:

    try{
    nombre.setText(rs.getString(«elemento»));
    rs = s.executeQuery(«SELECT imagen FROM dispositivos WHERE id =1»);

    byte[] img = rs.getBytes(«imagen»);

    Image picture = getImage(img, false);
    Icon icon = new ImageIcon(picture);
    imagen.setIcon(icon);

    } // fin del try

    catch( Exception e ){
    javax.swing.JOptionPane.showMessageDialog(this, e, «Error»,javax.swing.JOptionPane.ERROR_MESSAGE);
    }
    }

    no se por que me marque el error despues del resultset, ya intente resolverlo pero nada y ya se me acabaron las idea, espero me puedeas ayudar

    Gracias.

  19. Hola Ivan,

    Me he dado cuenta que en el código que publiqué hace falta una llamada al método next() del ResultSet.

    Debes ubicarlo entre rs = s.executeQuery(«SELECT imagen FROM dispositivos WHERE id =1″);
    rs.next(); //Esto hace falta
    byte[] img = rs.getBytes(”imagen”);

    Un ResultSet siempre se ubica antes de la primera fila con datos, al invocar al método next se ubica en una fila con datos.

    Gracias por hacerme caer cuenta en el error.

    Saludos.

  20. Hola Jorge:

    Bueno eh implementeado el codigo ya con el rs.next,
    pero al momento de invocarlo es decir;

    tengo el codigo para convertir de byte a imagen, y un metodo aparte donde hago la consulta, y un boton que al momento de darle clic se supone me pondria la imagen pero me manda un error nulo: mi codigo es el siguiente:

    public void llamar_imagen(){
    try{
    rs = s.executeQuery(«SELECT img FROM fotos WHERE id =1»);
    rs.next();
    byte[] imag = rs.getBytes(«img»);

    Image picture = getImage(imag, false);
    Icon icon = new ImageIcon(picture);
    imagen.setIcon(icon);// imagen es un label al que le quiero colocar la imagen.

    } // fin del try

    catch( Exception e ){
    javax.swing.JOptionPane.showMessageDialog(this, e, «Error»,javax.swing.JOptionPane.ERROR_MESSAGE);
    }

    y en el boton solo mando llamar a el metodo:

    private void btnimagenMouseClicked(java.awt.event.MouseEvent evt) {
    llamar_imagen();
    }

    y al momento de dar un clic me manda un error nulo ??

    Gracias Jorge

    Saludos

  21. Hola jorge:

    Perdon jajajjaja ya descubri mi error, bueno lo que pasa es que estaba un poco sacado de honda, me faltaba hacer la conexion, jejejejejejee bueno de todas formas muchas gracias por tu ayuda, te lo agradesco mucho.

    Saludos

  22. Hola Jorge:

    Bueno ya eh arreglado mi codigo jajjaja solo era la conexion, bueno mi duda es como hacer un id autonumerico, sin utilizar el mysql ( mysql tiene una opcion pero esa no la quiero usar ), es decir desde netbeans crear un codigo, porque por ejemplo en mysql si utilizo el valor autonumerico y voy agregando me los agrega bien pero al momento de borrar no me lo borra continua contando, es decir si tengo 10 valores y elimino 9 mysql sigue contando 11,12, etc… y yo lo que quiero es que si elimine uno me ponga el 10.

    Muchas gracias jorge.

  23. Hola, no se si alguien vea este foro aun, mi situacion es la siguiente:
    Tengo una aplicacion con Java (usando netbeans 6.1) y Mysql en la que manejo imágenes, nada complicado, es una imagen y los campos son descripciones de la misma (titulo, descripcion, tamaño, etc), lo que estoy haciendo ahorita es guardar solamente la ruta de la imagen, y mostrarla en un JLabel, el problema es que es una aplicacion en red, esto es hay un servidor de mysql en donde se maneja toda la informacion, entonces al momento de cargar la imagen para una alta, en una terminal, se carga y se da la informacion, pero al guardarla en la BD se guardaría la ruta local, entonces necesito o copiar la imagen en si mediante red al servidor y guardar la ruta local de la imagen en el servidor, o guardar la imagen en campo blob de la BD, esta opcion sería la menos óptima, porque son muchas imágenes y la BD crecería muchísimo…

    Si hay alguien que me pueda ayudar a realizar alguna de las dos formas se lo agradecería enormemente…

  24. Hola jorge:

    Te comento que eh arreglado el problema del id autonumerico, ee pensado y me surgio la duda de poder guardar una imagen desde una aplicacion de netbeans a una base de datos,

    Yo tengo una aplicacion donde utilizo un JFileChooser
    y selecciono la imagen que quiero y la abro en un label. Pero al momento de guardarla lo que yo hago es obtener la direccion y guardarla en el campo blob, pero me marca un error de IO, me dice que no es una imagen JPEG.

    Si e pudieras ayudar te lo agradeceria muchisimo.

  25. Hola l3ambin0,

    Te comento mi sugerencia para lo que necesitas hacer, al ser tú proyecto Web, necesariamente debes hacer una de las 2 situaciones:

    1. Subir la imagen a tú servidor y guardarla en algún directorio y en la base de datos lo que haces es guardar ese path de tú servidor.

    2. Almacenar la imagen en tú base de datos en campos que admiten información binaria. Esta opción es poco recomendada cuando manejas un volumen bastante grande de imágenes.

    Esto te puedo comentar.

    Saludos desde Loja, Ecuador

  26. Hola Ivan,

    Que bien que hayas superado tus problemas. Ahora yo te pregunto que tratas de enviar a almacenar en la base de datos? y cómo lo estás haciendo?

    Con tus respuestas tendré alguna sugerencia, al menos eso espero, jejejeje.

    Saludos

  27. Gracias por contestar Jorge…

    El detalle es que no es aplicación Web, es aplicación de escritorio, pero en Red, esto es un servidor para la base de datos Mysql y varias terminales corriendo el .jar, por eso quisiera un poco de ayuda acerca del manejo de archivos…

    De antemano Gracias

  28. Hola Jorge:

    Bueno lo que pasa es que quiero guardar una imagen en la base de datos, el proceso es:
    con un FileChooser escojo la imagen y la abro en un JLabel luego cuando le doy clic en el btn guardar,lo que quiero es guardar la imagen en la base de datos en el campo blob, gracias a tus aportes pude mostrar la imagen desde la base de datos pero ahora quiero guardarla desde un clic enviarla a la base de datos.

  29. Hola l3ambin0,

    Te comento que lo que necesitas hacer entonces, es utilizar algún API que te soporte FTP para tener acceso a un directorio de tú servidor en donde estarán almacenadas las imágenes.

    Tu aplicación cliente utilizará ese FTP para cargar y poder visualizar las imágenes, debes tener en cuenta el tema permisos para acceder vía FTP a tú servidor.

    Espero que mi comentario te ayude en algo.

    Saludos

  30. Hola Ivan,

    Te comento que deberías hacer lo contrario de lo que propongo en el post, es decir a tú imagen convertirla en un arreglo de bytes y almacenarla en la base. No he realizado algo así, pero creo que en general es lo que debes hacer, si puedo trataré de buscar algo de información sobre el tema, aunque estoy a medio gas porque mi portátil se dañó 😥

    Saludos.

  31. Hola Jorge:

    Gracias por resolver mis dudas, y pues que mal por lo de tu portatil, espero todo se te solucione bien, y bueno intentare convertir la imagen en un arreglo de bytes, gracias por tus comentarios.

  32. Hola Jorge:

    Bueno mi duda es que si desde un JLabel se puede obtener un array de bytes[], porque el label es donde coloco la imagen despues de seleccionarla.

    yo intente eso:

    String imag=String.valueOf(imagen.getIcon);
    //el conversor es de tipo Objeto.
    //imagen es como se llama mi label

    Gracias.

  33. Hola Jorge:

    Bueno mi duda es como colocar un enlace a internet a localhost con una direccion especifica, que al momento de dar clic se abra internet en la direccion que yo le de.
    es decir por ejemplo:

    Direccion:http://localhost/phpMyAdmin/
    tiene clave: usuario root clave:root

    y que al darle clic se direccione hay.

    Gracias por tu ayuda

  34. Hola Jorge:

    Saludos y espero se haya arreglado lo de tu portatil,
    bueno los problemas anteriores los eh resuelto totalmente, ahora me eh atorado con un filechooser,
    lo que yo quiero es que cuando se seleccione un elemento al momento de darle clic en abrir que tambien guarde la imagen o archivo seleccionado en una ruta especifica.

    Es decir dos acciones al mismo tiempo abrir la imagen y guardarlo en una ruta especifica.

    Claro que la segunda se ejecuta en segundo plano.

  35. Bueno, me contesto yo mismo : ) ….

    Efectivamente seguí los pasos mostrados en http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=uploadJSF y el código para mostrar una imágen obtenida desde una BD (claro, colocando primero unos conjuntos de valores en el Map de los atributos de la aplicación, estos valores es el flujo de bytes y el tipo de archivo a mostrar) es el siguiente:

    Próximamente en http://edario-it.blogspot.com colocaré información y detalles más específicos de cómo subir/obtener una imagen desde una BD empleando JSF : ).

  36. Sorry, ahora sí el código:


    String idAutor = request.getParameter("id_autor");
    String contentType = (String)application.getAttribute(idAutor + "_fileupload_type");
    byte[] bytes = (byte[])application.getAttribute(idAutor + "_fileupload_bytes");

    if (bytes != null)
    {
    response.setContentType(contentType);
    response.getOutputStream().write(bytes);
    }

  37. hola gente!tengo un problemita.
    Tengo un servlet, un JSP,Codigo JAva y Base de Datos mysql.

    Necesitaria crear una tabla en la Bd, que me guardae una ruta de la imagen, y un ID.
    y necesitaria en el jsp tener la llamada a esa imagen con algun tipo de ID para poder hacer el query dentro del servlet asi encontrar la ruta, traer la imagen, y imprimirla en el jsp.
    el jsp tiene muchas imagenes con textos.
    Que el me podria hacer este super facor, le agradeceria muchisimooooooo, me estoy matando con estoooo gracias!!

  38. UN CONSULTA. YO QUISIERA SABER QUE DATOS ME PODRIAN DAR PARA SABER COMO HAGO PARA QUE MI LOGICA DE JAVA SE INTEGRE A UN APARATO CUALQUIERA POR EJMPLO SI TENGO MI LOGICA PROGRAMADA SOBRE UNA CALCULADORA Y TENGO UN CIRCUITO DE CALCULADORA COMO HAGO PARA INTEGRAR MI LOGICA A ESTE HARDWARE. LOS DATOS QUE ME DEN PUEDE SER CUALQUIERA COMO:
    – nombre de la especialidad
    – terminos conocidos (los que sea)
    – informacion de libro (de cualquier autor)
    – etc. En resumen me vale cualquier informacion que se tenga porqe soy muy curioso.
    – A por sierto ya se como se hace ejecutables de java pero solo me falta saber sobre esos temas relacionados con incluir el software a un hardare.
    NO ESTA DENTRO DE LO QUE ESTOY APRENDIENDO. PERO SOY MUY CURIOSO CON QUE ME DEN ALGO DE INFORMACION O DATO ME SERVIRA PARA INVESTIGAR POR MI CUENTA. GRCIAS Y HASTA PRONTO

  39. Hola topo,

    Te comento que no he realizado algo cómo eso, únicamente e visto aplicaciones Java que corren en la computadora y que vía puertos Seriales o Paralelos se comunican con algún hardware adicional.

    Pero creo que el tema va en aplicaciones embebidas (embedded). Encontré algo en google:
    http://www.javaworld.com/javaworld/jw-09-1996/jw-09-ripps.html

    Si tienes algún progreso en el tema o noticias de interés te invito a que las compartas.

    Saludos

  40. muy bn amigo Jorge estare investigando pero si por alli encuentras algo entre las personas que rondan esta web me avisas porque estoy interesado en saber esas aplicaciones y pes asi me ayudas tambn para entender de que trata el asunto y asi las paso para que la gente lo lea. Estare al tanto, y grcs.

    PD: Cualquier dato, por mas insignificante que sea, me sirve. Si tienes algo postealas para leerlas. Hasta pronto y salu2.

  41. Buenas tardes Ingeniero, mi pregunta es la siguiente necesito que me ayude tengo una base de datos y necesito presentar las imagenes en netbeans una a la vez, ya he consegido sacarlas de la base de datos (oracle) a un directorio, ahora mi pregunta es como del directorio las ubico en un jframe en mi aplicacion de java.. si me puede ayudar con algunos tips
    Gracias de antemano

  42. Hola ffojeda08,

    Te hago un par de preguntas ¿qué tipo de aplicación estás desarrollando Web o Swing? ¿Porqué las guardas en un directorio? Si estas con aplicaciones Swing una forma fácil de mostrarlas es utilizando un JLabel al cual el pones la imagen. Si me das mayores detalles te puedo ayudar.

    Saludos

  43. Muy bien ya lo he conseguido pero ahora mi duda es que se me hace muy larga o muy grande el tamaño de la imagen cuando la cargo ya probe con las configuraciones el alto, ancho pero aun asi o se hacen muy grandes o no me muestra toda la imagen si le encojo. hay alguna forma de autoajustar la imagen a un tamaño fijo para que no se me hagan los problemas q le dije

  44. Muy bien ya lo he conseguido pero ahora mi duda es que se me hace muy larga o muy grande el tamaño de la imagen cuando la cargo ya probe con las configuraciones el alto, ancho pero aun asi o se hacen muy grandes o no me muestra toda la imagen si le encojo. hay alguna forma de autoajustar la imagen a un tamaño fijo para que no se me hagan los problemas q le dije
    Gracias

  45. Hola amigo jorge, adonde por aqui de nuevo con eso de los «embedded» encontre informacion muy compleja que descargue del emule y para ello hay que saber de electronica sobre Cmos, inteligencia artificial, algoritmo genetico, sistemas expertos (hay maestrias para ese curso tambn) y algunos software como el PPL qe es un lenguaje de POO o el ppc y otros mas.
    Si que anda complicado la cosa. Yo no tendria ningun problema en presentar detalles de lo que se trata en si el tema si no tuviera tan revuelta las ideas xD eso fue algo qe pude ordenar. Pero si alguien sabe mas por aqui ando mientras tanto seguire ordenando ideas. Hasta otra oportunidad, salu2.

  46. hola jorge,

    yo estoy haciendo una aplicacion parecida a la de ivan (aplicacion de escritorio cliente-servidor) no he podido encontrar la forma de guardar una imagen en la BD (la utilizacion de ftp en mi caso me da mas problemas q soluciones) he cambiado cuanta cosa se me ha ocurrido a tu codigo y otros mas q he encontrado y nada me funciona, para mi caso lo q creo mas funcional con las imagenes es guardarlas y extraerlas directamente de la base de datos.

    ojala me puedas ayudar

  47. yo stoy intentando hacer lo mismo de sacar la imagen pero desde postgres usando netbeans, supongo q el tipo blob q mencionan en postgres es el oid, recien empezare a probar las sugerencias de esta pag la cual me parecio la mas interesante de las q busq… gracias.

  48. BUEN DIA A TODOS NECESITO AYUDA PARA SABER COMO ES EL CODIGO PARA HACER UN:
    – FOR-EACH
    – METODOS CON PARAMETROS OPCIONALES
    LOS DOS EN CODIGO JAVA
    SE LOS AGRADESCO DE ANTEMANO ESPERO UNA RESPUESSTA DE ALGUNO QUE PUEDA AYUDARME. SALU2

    1. Hola CASIQUE,

      Bueno un for-each en Java te permite recorrer colecciones de datos (arreglos, matrices, ArrayList, etc)

      int []arr = {2, 0,-1, 34, 8};
      for(int i : arr){
      System.out.println(i);
      }

      En el código anterior la variable i tomará cada uno de los valores que tiene el arreglo y los presentará.

      Ahora para tú segunda pregunta puedes visitar http://today.java.net/pub/a/today/2004/04/19/varargs.html y podrás encontrar, al menos eso creo, la respuesta a tú pregunta.

      Saludos

  49. ola estaba chekando el codigo pero al inicio me salieron varios errores por k me faltaban los import
    aorita tengo todos pero me marca este error
    ——————————–
    unreported exception java.io.IOException; must be caught or declared to be thrown
    Image picture = getImage(imag, false);
    ———————————-
    me podrian decir en k me fallo y los imports k ocuparon a los k ya les kedo este codigo gracias

  50. Hola amigos,

    Tengo problemas al presentar un archivo desde un servlet de java, este archivo se encuentra almacenado en la base de datos(Oracle) en un campo BLOB.
    En el Servlet lo extraigo por medio de un PrepareStament y lo almaceno y se lo asigno a un Resultset.
    Al presentarme el archivo, se habre en el word como en hexadecimal o algo asi ejemplo=»ÐÏ à¡± á > þÿ «. el codigo que utilizo es el siguiente:

    ls_tipoContenido = «application/msword»;
    Blob b = rs.getBlob(«ARCHIVO»);
    p_response.setContentType(ls_tipoContenido);
    p_response.setContentLength( (int) b.length());
    InputStream is = b.getBinaryStream();
    OutputStream os = p_response.getOutputStream();
    byte buf[] = new byte[(int) b.length()];
    is.read(buf);
    os.write(buf);
    os.close();

    Les agradesco de antemano, espero una respuesta por parte de alguno de ustedes…

  51. Alguien podria apoyarme con este problemita de favor ya que necesito desplegar una y muchas imagenes, tambien necesito ver una vista en miniatura de la imagen

    hola gente!tengo un problemita.
    Tengo un servlet, un JSP,Codigo JAva y Base de Datos mysql.

    Necesitaria crear una tabla en la Bd, que me guardae una ruta de la imagen, y un ID.
    y necesitaria en el jsp tener la llamada a esa imagen con algun tipo de ID para poder hacer el query dentro del servlet asi encontrar la ruta, traer la imagen, y imprimirla en el jsp.
    el jsp tiene muchas imagenes con textos.
    Que el me podria hacer este super facor, le agradeceria muchisimooooooo, me estoy matando con estoooo gracias!!

  52. Hola a todos, especialmente a ti Jorge, creo que en este sitio, aunque es primera vez que participo, encontrare la solucion al problema que me tiene de puntas. Resulta que tengo una aplicacion de ecritorio que se ejecuta desde un .jar, dicha aplicacion gestiona una base de datos creada en MySQL sobre una plantilla de trabajadores con todos sus datos (nombre, apellidos, etc), pero mi problema esta en la foto de cada trabajador. que quiero hacer:

    1. Poder cargar la imagen desde un jFilechooser y ponerla en un JLabel (aun no lo he hecho porque no logro sacarla desde el jFilechooser).

    2. Guardar esa imagen en la Base de Datos que tengo creada para la plantilla en un campo (creo que el campo deberia ser de tipo blob, si alguien tiene otra sugerencia la acepto).

    3. Poder cargar la imagen desde la Base de Datos
    y ponerla en el mismo label.

    He ahi mis problemas, todo se resumen en uno solo «Estoy hundido con las imagenes». La 1ra pregunta se utilizara solo cuando se va a agregar un nuevo trabajador a la plantila, el resto es solo visualizacion de informacion ya creada.

    Bueno me despido deseandoles un feliz analisis para ayudarme a resolver mis problemas, tengan piedad de mi, les agradecere cualquier comentario.

    Gracias

  53. El método que manejan para obtener las imágenes sólo funciona con jpeg
    Ojalá me puedan ayudar a obtener imágenes con diferentes formatos, como .png, .gif, etc

    Iterator readers = ImageIO.getImageReadersByFormatName(”jpeg”);

    Gracias!

  54. Olle por personas como tu es que progresamos, Excelente! Muchas Gracias me sirvio de mucho no te imaginas cuanto te lo agradezco!!! Gracias!!!!!! ^^

  55. Hola, necesito de tu ayuda, mira estoy realizando una aplicacion en java, en la cual yo ingreso datos (por ejemplo: cantidad de servidores : 4, cantidad de usuarios : 8, software utlizados: sql, oracle, visual studio, BPWIN.), ya cuando el usuario llena estos datos, tengo un boton creado al cual al hacerle click, tiene que enviarle una ventana donde le presente estos datos como una arquitectura, es decir, imagenes donde me represente cada servidor, con su numero respectivo de usuarios y con los software que trabaja cada servidor. Por favor ayudame. Gracias.

  56. hola estoy haciendo una aplicacion web en jsp ya logre mostrar la imagen de la base de datos en mysql con jsp pero solo aparece la imagen y no aparece el estilo etc que contiene solo aparece la imagen ayuda ¡¡¡¡¡

  57. Hola creo que llego muy tarde pero agradecere toda ayuda necesito saber como cargar las imagenes (desde mi base de datos en postgres ) en jLabels, resulta que los labels que creo son el numero de registros que llevo almacenados pero se presenta un error al convertir la imagen. Por favor si alguien me podria guiar se lo agradeceria

  58. de que carajo estan hablando sonsos poniendo textos sin sentido. haganse entender cuando exponen algo solo tiran ideas al aire. pendejos..

  59. para empezar si supieran de lo que estan hablando crearian una pagina original de ustedes. pero usan wordpress. que es como tener una cuenta de facebook youtube etc… seguro que no tienen idea de lo que es hacer una pagina desde un hasta estupidos

  60. hola

    para empezar tengo una duda (COMO LO CONVIERTO UNA IMAGEN EN JAVA WEB NETBEANS PARA LUGO GURADARLO EN LA BASE DE DATOS QSL SERVER ) COMO TAMBIEN CON VERTIR DE BYTE A IMAGEN PARA MOSTRAR EN EL JSP DE JAVA WEB

Deja un comentario