2010-01-27 103 views
15

我試圖創建一個基於駐留在數據庫上的信息的PDF影像。知道我需要檢索一個TIFF圖像,該圖像作爲BLOB存儲在來自Java的mysql數據庫中。我不知道該怎麼做。我找到的例子展示瞭如何檢索它並將其保存爲文件(但在磁盤上),並且我需要駐留在內存中。檢索存儲爲BLOB在MySQL數據庫

表名:IMAGENES_REGISTROS

BLOB字段名稱:IMAGEN

什麼想法?

+0

您使用普通的JDBC? – Bozho 2010-01-27 21:25:34

+0

是Bozho,普通的JDBC與MySQL lib中的Java。 – Sheldon 2010-01-27 21:28:42

+0

看到我的更新答案 - 原來還存在另一種方式做到這一點:) – Bozho 2010-01-27 23:07:20

回答

18

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

而且那麼代碼取決於你將如何閱讀和嵌入圖像。

+0

謝謝,只是一個評論。 imageBlob返回一個Long。而getBytes期望一個Integer。我解析(Integer.ParseInt ..)龍,它的工作原理。我不知道最終是否會帶來問題。 有沒有其他辦法?感謝 – Sheldon 2010-01-27 21:56:51

+3

不要使用'#ResultSet的getBlob()'或'的ResultSet#的getBytes()'。只需使用ResultSet#getBinaryStream()'。 – BalusC 2010-01-28 11:58:42

+0

是它只是一個方便的方法,或有給它更多的東西? – Bozho 2010-01-28 12:00:41

0
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

你應該編輯你的答案以包含該信息,而不是添加評論。更多的解釋是很好的 - 只有代碼的答案是不鼓勵的。 – Ajean 2015-10-05 15:41:59

0
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);    
      } 
     } 
    } 
相關問題