使用JDBC将对象(文档文件)存储到SQL中

时间:2012-03-17 09:35:42

标签: java serialization jdbc

我有一个JSF表单,用户上传数据。现在我需要将上传的文件(可以是pdf,doc,xls等)存储到数据库中。当然,此文件稍后将由审阅者加载。知道最好的方法是什么?序列化?如果是的话,我应该具体看哪一个?

我已经看到大多数序列化处理用户创建的对象(我熟悉的对象),如员工对象,建筑物等。但我不知道如何将文件文档表示为对象。 as传递给inputReader以获取二进制字符串......

谢谢,

2 个答案:

答案 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();