Получить изображение, сохраненное как BLOB в базе данных MYSQL

Я пытаюсь создать PDF на основе информации, которая находится в базе данных. Знаю, что мне нужно получить изображение TIFF, которое хранится как BLOB в базе данных mysql с Java. И я не знаю, как это сделать. Примеры, которые я нашел, показывают, как получить его и сохранить в виде файла (но на диске), и мне нужно было проживать в памяти.

Название таблицы: IMAGENES_REGISTROS

BLOB Имя поля: IMAGEN

Любые идеи?

Ответы

Ответ 1

При вызове ResultSet:

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

В качестве альтернативы вы можете позвонить:

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

Как отметил в своем комментарии BalusC, вам лучше использовать:

InputStream binaryStream = resultSet.getBinaryStream(yourBlobColumnIndex);

И тогда код зависит от того, как вы собираетесь читать и вставлять изображение.

Ответ 2

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();
            }
        }
    }

Ответ 3

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);               
            }
        }
    }