2012-03-17 69 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

相关问题