web-dev-qa-db-fra.com

Récupérer une image stockée en BLOB sur une base de données MYSQL

J'essaie de créer un PDF basé sur les informations qui résident sur une base de données. Sachez que je dois récupérer une image TIFF qui est stockée en tant que BLOB sur une base de données mysql à partir de Java. Et je Je ne sais pas comment le faire. Les exemples que j'ai trouvés montrent comment le récupérer et l'enregistrer en tant que fichier (mais sur disque) et que je devais résider en mémoire.

Nom de la table: IMAGENES_REGISTROS

Nom du champ BLOB: IMAGEN

Des idées?

15
Sheldon

Sur votre ResultSet appel:

Blob imageBlob = resultSet.getBlob(yourBlobColumnIndex);
InputStream binaryStream = imageBlob.getBinaryStream(0, imageBlob.length());

Vous pouvez également appeler:

byte[] imageBytes = imageBlob.getBytes(1, (int) imageBlob.length());

Comme BalusC l'a noté dans son commentaire, vous feriez mieux d'utiliser:

InputStream binaryStream = resultSet.getBinaryStream(yourBlobColumnIndex);

Et puis le code dépend de la façon dont vous allez lire et intégrer l'image.

19
Bozho
imagebytes = rs.getBytes("images");
image=getToolkit().createImage(imageBytes);
Image img = image.getScaledInstance(100,100,Image.SCALE_SMOOTH);
ImageIcon icon=new ImageIcon(img);
jLabel6.setIcon(icon);

Essayez ce code pour obtenir une image réglable du blog Mysql dans netbeans

2
Ratul Arora
final String dbURL = "jdbc:mysql://localhost:3306/portfolio";
    final String dbUser = "root";
    final String dbPass = "";

    Connection conn = null;
    Statement stmt = null;

    try {
        //DriverManager.registerDriver(new com.mysql.jdbc.Driver());
        Class.forName("com.mysql.jdbc.Driver");

        conn = DriverManager.getConnection(dbURL, dbUser, dbPass);
        System.out.println("db connected");
        stmt = (Statement) conn.createStatement();

        ResultSet rs1;
        rs1 = stmt.executeQuery("select profileImage from tbl_welcome where id = 1117");

        if (rs1.next()) {
            byte[] imgData = rs1.getBytes("profileImage");//Here....... r1.getBytes() extract byte data from resultSet 
            System.out.println(imgData);
            response.setHeader("expires", "0");
            response.setContentType("image/jpg");

            OutputStream os = response.getOutputStream(); // output with the help of outputStream 
            os.write(imgData);
            os.flush();
            os.close();

        }
    } catch (SQLException ex) {
        // String message = "ERROR: " + ex.getMessage();
        ex.printStackTrace();
    } finally {
        if (conn != null) {
            // closes the database connection
            try {
                conn.close();
            } catch (SQLException ex) {
                ex.printStackTrace();
            }
        }
    }
2
private void loadFileDataBlobFromDataBase()
             {
            List<Blob> bFile = jdbcTemplate.query(sql, new RowMapper<Blob>() {
                @Override
                public Blob mapRow(ResultSet rs, int rowNum)
                        throws SQLException {
                    return rs.getBlob(1);
                }
            });
            if (bFile != null && bFile.size() > 0) {
                bufReader = new BufferedReader(new InputStreamReader(bFile.get(
                        0).getBinaryStream()));
            }
            if (null != bufReader) {
                dataVO record = null;
                String lineStr = bufReader.readLine();
                record = (dataVO) lineMapper.mapLine(lineStr, 1);               
            }
        }
    }
1
Raje