如何通过java在oracle数据库中上传对象

时间:2011-03-08 08:12:55

标签: java oracle jdbc oracle9i

我想使用java 将多个对象上传到我的oracle数据库

我的对象包括{DOC,DOCX,PPT,PPTX,PDF}文件。

如何在oracle数据库中上传我的对象并从数据库中检索它。

我也有兴趣了解更多关于“如何从Java批量插入Oracle数据库中的对象列表?”但我认为这个问题之前已经回答了。如果您有任何新的或有趣的资源,请与我分享...

2 个答案:

答案 0 :(得分:3)

插入db:

int primaryKeyId = getNextPrimaryKeyId();
PreparedStatement stmt1 = conn.prepareStatement(" insert into docTable values (?, ?, empty_blob()) ");
stmt1.setInt(1, primaryKeyId );
stmt1.setString(2, getDocumentTitle());
stmt1.executeUpdate();

PreparedStatement stmt2 = conn.prepareStatement(" select doc from docTable where id = ? for update ");
stmt2.setInt(1, primaryKeyId);
stmt2.execute();

OracleResultSet rset = (OracleResultSet)stmt2.getResultSet();
if (rset.next()) {
  BLOB document = rset.getBLOB("doc");
  document.trim(0);
  OutputStream os = document.getBinaryOutputStream();
  os.write(getDocumentToBeWrittenToDb());
  os.flush;
  os.close;
}

从db中读取:

PreparedStatement stmt = conn.prepareStatement(" select title, doc from docTable where id = ?");
stmt.setInt(1, primaryKeyId);
stmt.execute();

BLOB document;
OracleResultSet rset = (OracleResultSet)stmt.getResultSet();

if (rset.next())
{
  ByteArrayOutputStream baos = null;
  InputStream is = null;
  try
  {
    BLOB document = rset.getBLOB("document");
    String title = rset.getString("title");
    is = document.getBinaryStream();
    baos = new ByteArrayOutputStream();
    byte[] data = new byte[2048];
    int len;
    while ((len = is.read(data)) != -1)
    {
      baos.write(data, 0, len);
    }
  } finally
  {
    if (null != baos) baos.close();
    if (null != is) is.close();
  }

  return baos.toByteArray();
}

答案 1 :(得分:0)

如果你

  1. 在Linux和数据库上运行
  2. 版本是11gR2,你有
  3. 在其中创建了一个dbfs,你有
  4. 使用dbfs_client
  5. 安装它

    您可以将文件系统作为常规网络文件系统进行访问。这样做是使用常规文件系统io在数据库中存储非结构化数据的最简单方法。 dbfs_client使用fuse转换了调用。如果需要,您可以稍后创建与其他数据的关系。

    罗纳德。