在MYSQL数据库中检索存储为BLOB的图像

我正在尝试基于驻留在数据库上的信息创buildPDF。 知道我需要检索一个TIFF图像作为一个BLOB存储在Java数据库的MySQL数据库。 我不知道该怎么做。 我find的例子展示了如何检索它并将其保存为一个文件(但在磁盘上),我需要驻留在内存中。

表名:IMAGENES_REGISTROS

BLOB字段名称:IMAGEN

有任何想法吗?

在您的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); 

然后代码取决于你将如何阅读和embedded图像。

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