2013-04-05 114 views
0

我不能顯示BLOB圖像,我在保存mysql。我有豆,jsp。我使用3層架構,我想用圖片顯示所有產品。顯示圖像存儲爲BLOB在數據庫

在acceesor:

try { 
     Connection cn = getVla().getConnection(); 
     String sql = "SELECT * FROM products"; 
     PreparedStatement pst = cn.prepareStatement(sql); 
     ResultSet rs = pst.executeQuery(); 
     ArrayList<products> ls = new ArrayList<products>(); 
     while(rs.next()) { 
      products s = new products(); 
      s.setPk(rs.getLong("pk")); 
      s.setName(rs.getString("name")); 
      s.setPrice(rs.getDouble("price")); 
      s.setPic(rs.getBlob("pic")); 
      s.setComments(rs.getString("comments")); 
      ls.add(s); 
     } 
     return ls; 
    } 

產品有:

public Blob getPic() { 
     return pic; 
    } 

在main.jsp中

<%= 
List<products> product = bean.getproducts(); 

%> 
<h1>Product: </h1> 
<% 
for(products c : product) { 
%> 
From <%= c.getName()%> <br/> 
<%= c.getPic()%></b><br/> 
<b><%= c.getPrice()%> </b><br/> 
<%= c.getComments()%> 
<hr/> 
<% 
} 
%> 

我怎樣才能DIS播放圖片? (目前我正在顯示[email protected]

+0

只是爲了澄清,你想要顯示**每個產品**圖片? – mthmulders 2013-04-05 13:32:13

回答

4

你所看到的是Blob.toString()的結果。由於它是二進制內容,因此JVM無法真正體現出很好的表示形式。

你應該做的是創建一個單獨的Servlet,它只從數據庫中檢索Blob並將其內容流到response.getOutputStream()。在你的JSP中,你添加一個<img>標籤,其src屬性指向你剛剛寫的Servlet

Servlet應一次讀一個產品的形象,所以查詢將略有不同:它應該是足有

String sql = "SELECT pic FROM products where pk = " + pk; 

請注意,您需要使用一些請求,指定此pk變量參數。上面的代碼行只是一個例子來展示這個想法。它是非常不安全的從字面上將請求URL複製到SQL查詢中。谷歌的「SQL注入」閱讀更多關於這一點。

使用Blob.getInputStream()您可以獲得一個InputStream,其內容可以複製到response.getOutputStream()以便將其寫回瀏覽器。不要忘記在該響應上設置適當的content-type,例如JPEG圖片的情況下爲「image/jpg」。

+0

你能更具體地瞭解一下新的servlet必須具備的內容嗎? – marios 2013-04-05 12:00:39

+0

@marios:只要看看這裏: http://stackoverflow.com/questions/4848819/how-to-display-image-from-database-in-servlet 在這裏也: HTTP://堆棧溢出。com/questions/6315671/how-to-retrieve-image-from-database-and-display-in-jsp-via-servlet 因爲我認爲它是一種更好的方法來將文件存儲在一個目錄中並保持目錄路徑在D B。 – 2013-04-05 12:05:13

+0

我沒有使用servlet.i正在使用類 – marios 2013-04-05 12:09:55

0

正如mthmulders所說你看到的是Blob.toString()的值。

BalusC某個時候發佈前就通過servlet服務從數據庫博客recpvered圖像的2篇大文章:

http://balusc.blogspot.fr/2007/04/imageservlet.html

而更近的一個用gzip和恢復處理

http://balusc.blogspot.fr/2009/02/fileservlet-supporting-resume-and.html

+0

我沒有使用servlet.i正在使用類 – marios 2013-04-05 12:08:47

+0

請注意,這些示例從文件系統的指定位置讀取圖像,而問題是關於將圖像存儲在關係數據庫中。 – mthmulders 2013-04-05 12:08:49

+0

實際上第一個鏈接並沒有顯示兩者,首先來自文件系統,然後來自關係數據庫 – ufasoli 2013-04-05 12:13:02

相關問題