2013-06-12 18 views
0

此代碼在數據庫中存儲空值。BLOB更新不起作用,也不顯示錯誤,但它存儲空

PreparedStatement ps; 
    String preparestmt = "update t_member set photo=? " + " where aplication_num = (select max(application_num) from t_member)"; 
    ps = con.prepareStatement(preparestmt); 
    ps.setBinaryStream(1,in,in.available()); 
    ps.executeUpdate(); 
    ps.close(); 
    in.close(); 
    con.commit(); 
    con.close(); 

photo是blob字段,in是包含圖像文件的inputstream。在插入圖像保存正確,但我嘗試update.it始終只存儲null。 inputstream也很好。它還有54353字節,我也檢查一下。幫助我更新這些數據。

+0

你爲什麼要將application_num設置爲max()?你如何確保這個聲明總能返回你想要的application_num? –

+0

達不是我想要的唯一tat.if我更新任何其他專欄意味着它更新罰款blob只有我問。 – sabarirajan

+0

你可以粘貼你的插入語句嗎?你說這是有效的。 –

回答

0

你可以請嘗試從Java中檢索更新的圖像,並檢查它是否得到更新。我希望你在SQLClient中查看,經常對BLOB顯示爲空。

0

InputStream.available()確實不是給你的流中的字節數。

它返回可以讀取的字節數而不會阻塞

From the JavaDocs

返回一個估計可以從該輸入流被讀取(或跳過)的字節數的而不通過一種方法的下一次調用此輸入流阻斷 。 [...]

使用此方法的返回值分配旨在保存此流中的所有數據的緩衝區永遠是不正確的。

(強調我)

你需要找到不同的方式來計算你的BLOB的大小。如果數據來自File的使用,File.length()

相關問題