2012-03-17 74 views
0

我有一個用戶上傳數據的JSF表單。現在我需要將上傳的文件(可能是pdf,doc,xls等)存儲到數據庫中。當然,這個文件當然會在稍後被評論者加載。任何想法什麼是這樣做的最好方法?序列化?如果是的話,我應該看哪個特定的地方?使用JDBC將對象(文檔文件)存儲到SQL中

我見過大多數序列化處理用戶創建的對象(我熟悉的對象),如員工對象,建築物等。但我不知道如何將文件文檔表示爲對象。如在什麼傳遞給inputReader得到二進制串...

感謝,

+0

怎麼不存儲有關數據庫文件的元數據...但實際內容的數據庫,但讓它活在文件系統上......我通常會發現這個問題更清潔 – jsshah 2012-03-17 11:09:51

回答

1

沒有必要進行序列化的一切都在這裏 - 一個文件是(簡單地)只是一個名字和其中的數據。所以你只需要一個類型爲VARCHAR(或其他)的名稱字段和一個IMAGE類型的數據字段,或者你的數據庫用於blob的任何類型。

您可以使用PreparedStatement.setBlob(或可能是PreparedStatement.setBinaryStream;我會欣然承認我對這些差異沒有把握)來上傳數據。

+0

哇,我希望這樣做......我會盡力讓這項工作儘管看起來夠簡單:)感謝隊友的回覆! :D – 2012-03-17 09:44:50

1

要將二進制文檔插入到數據庫中,您需要一個包含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(); 
+0

我仍在測試解決方案... – 2012-03-17 12:38:23

相關問題