我有一个JSF表单,用户上传数据。现在我需要将上传的文件(可以是pdf,doc,xls等)存储到数据库中。当然,此文件稍后将由审阅者加载。知道最好的方法是什么?序列化?如果是的话,我应该具体看哪一个?
我已经看到大多数序列化处理用户创建的对象(我熟悉的对象),如员工对象,建筑物等。但我不知道如何将文件文档表示为对象。 as传递给inputReader以获取二进制字符串......
谢谢,
答案 0 :(得分:1)
这里根本不需要序列化 - 文件(简单地)只是一个名称及其中的数据。所以你只需要一个类型为VARCHAR(或其他)的名称字段和一个IMAGE类型的数据字段或数据库用于blob的任何类型。
您可以使用PreparedStatement.setBlob
(或可能PreparedStatement.setBinaryStream
;我很乐意承认我对差异没有信心)上传数据。
答案 1 :(得分: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();
从DB中读取:
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();