Получить изображение, сохраненное как 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);
}
}
}