我有一個用戶上傳數據的JSF表單。現在我需要將上傳的文件(可能是pdf,doc,xls等)存儲到數據庫中。當然,這個文件當然會在稍後被評論者加載。任何想法什麼是這樣做的最好方法?序列化?如果是的話,我應該看哪個特定的地方?使用JDBC將對象(文檔文件)存儲到SQL中
我見過大多數序列化處理用戶創建的對象(我熟悉的對象),如員工對象,建築物等。但我不知道如何將文件文檔表示爲對象。如在什麼傳遞給inputReader得到二進制串...
感謝,
我有一個用戶上傳數據的JSF表單。現在我需要將上傳的文件(可能是pdf,doc,xls等)存儲到數據庫中。當然,這個文件當然會在稍後被評論者加載。任何想法什麼是這樣做的最好方法?序列化?如果是的話,我應該看哪個特定的地方?使用JDBC將對象(文檔文件)存儲到SQL中
我見過大多數序列化處理用戶創建的對象(我熟悉的對象),如員工對象,建築物等。但我不知道如何將文件文檔表示爲對象。如在什麼傳遞給inputReader得到二進制串...
感謝,
沒有必要進行序列化的一切都在這裏 - 一個文件是(簡單地)只是一個名字和其中的數據。所以你只需要一個類型爲VARCHAR(或其他)的名稱字段和一個IMAGE類型的數據字段,或者你的數據庫用於blob的任何類型。
您可以使用PreparedStatement.setBlob
(或可能是PreparedStatement.setBinaryStream
;我會欣然承認我對這些差異沒有把握)來上傳數據。
哇,我希望這樣做......我會盡力讓這項工作儘管看起來夠簡單:)感謝隊友的回覆! :D – 2012-03-17 09:44:50
要將二進制文檔插入到數據庫中,您需要一個包含BLOB(二進制大對象)類型的列的表。
一具骷髏寫:
File f = new File("your.doc")
FileInputStream fis = new FileInputStream();
PreparedStatement pstmt = dbCon.prepareStatement("insert into docs(doc) values(?)");
pstmt.setBinaryStream(1, fis, (int) l.length());
pstmt.executeUpdate();
pstmt.close();
從數據庫讀取:
Statement st = dbCon.createStatement();
ResultSet rs = st.executeQuery("select doc from docs where ...");
if(rs.next())
{
InputStream is = rs.getBinaryStream("doc");
FileOutputStream fos = new FileOutputStream("filename");
// copy is to fos
}
rs.close();
st.close();
我仍在測試解決方案... – 2012-03-17 12:38:23
怎麼不存儲有關數據庫文件的元數據...但實際內容的數據庫,但讓它活在文件系統上......我通常會發現這個問題更清潔 – jsshah 2012-03-17 11:09:51