2015-06-19 46 views
0

我想通過「瀏覽」按鈕將圖像插入到數據庫中。這條線有什麼問題,ps.setBlob(l16, inputStream)?此行每次都顯示一個錯誤。如何將圖像插入Java數據庫中

我的代碼是:

Class.forName("com.mysql.jdbc.Driver"); 

Connection con=DriverManager.getConnection( 
"jdbc:mysql://localhost:3306/hostel_management","root",""); 

PreparedStatement ps= con.prepareStatement("insert into student_info values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); 

ps.setString(1, tf1.getText()); 
ps.setString(2, tf2.getText()); 
. 
. 
. 
ps.setString(15, tf15.getText()); 

InputStream inputStream = new FileInputStream(new File(tf16.getText())); 

ps.setBlob(16, inputStream); 

ps.execute(); 

JOptionPane.showMessageDialog(null, "Successfully Inserted", "Message", JOptionPane.ERROR_MESSAGE); 

con.close(); 
+2

「此行每次都顯示錯誤」錯誤消息是什麼? – hexafraction

+0

您是否驗證過參數順序? –

+1

嘗試'ps.setBlob(16,inputStream,(int)fileLength);' – saka1029

回答

-1

最佳辦法,是將圖像存儲的文件夾中,並且圖像的路徑保存到數據庫中。將Blob或Clob對象保存到數據庫中過於耗時,並且在某些情況下可能會導致效率低下。

+0

這應該是一條評論。這不是問題的答案。 –

+0

這非常含糊。也可能是錯的。無論如何,將路徑存儲在數據庫中是完全沒有意義的,那麼你將如何到達圖像呢? – Cubic

+0

將路徑存儲到數據庫中時,只需將路徑放入html代碼中的img tag - src參數中即可。使用客戶端瀏覽器上的http自動從服務器獲取圖像。 數據庫中的url看起來像 - 「http://servername.com/somefolder/uniqueimagename.jpg」,並且您的html img標記看起來像這樣 -

0

將圖像轉換爲Base64,並將其作爲文本保存到數據庫中。當你想要它時,獲取它並將其還原爲位圖並使用它。

使用Apache公地做到這一點的最好辦法

Base64.encode(FileUtils.readFileToByteArray(file)); 

用於解碼它,

InputStream stream = new ByteArrayInputStream(Base64.decode(image.getBytes(), Base64.DEFAULT)); 

如果圖像是一個字符串包含Base64編碼的文本。 讓我知道你是否想要更多的幫助。

+0

你爲什麼要那樣做?存儲任意二進制數據,如op正試圖做的是blob列正在爲什麼 – Cubic

+0

Blob在內部像字符串一樣處理。所以它當然是有道理的。 – Sibidharan

+1

TEXT和CHAR將轉換爲它們與時間相關的字符集。 BLOB和BINARY只是存儲字節。 BLOB用於存儲二進制數據,而Text用於存儲大字符串。 將BLOB值視爲二進制字符串(字節字符串)。他們沒有字符集,排序和比較基於列值中字節的數值。 TEXT值被視爲非二進制字符串(字符串)。他們有一個字符集,並且根據字符集的排序規則對值進行排序和比較。 – Sibidharan