我有一个用户上传数据的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