1

我有一个 InputStream,我知道它是一个 PDF,我需要用它来更新 Oracle 中的 Blob。如何将此流转换为 BufferedOutputStream,或者使用此流信息更新 Blob?

请注意,由于代码的限制,我不允许在我的代码中包装 Oracle 类。

到目前为止我已经尝试过:

我已经尝试过使用这个答案:https ://stackoverflow.com/a/1574857/2188082来连接流,但结果是 NullPointerError,因为 OutputStream 是空的。

我正在尝试运行的当前查询:

pstmt = dbConn.prepareStatement("UPDATE "+ qualTable("document")+" set document_blob ="
                   +" utl_raw.cast_to_raw('"+inStream+"') where document_id = " + documentId);

       pstmt.execute();
       pstmt.close();

我知道 utl_raw.cast_to_raw 可能不是调用 inStream 读取的正确 oracle 方法,不幸的是我并不像我想的那样精通 Oracle,所以我不知道我应该使用正确的演员表.

4

2 回答 2

3

PreparedStatement.setBlob(参数索引,输入流,长度)。

像 setString 和其他 setter 一样。没有OutputStream,但需要一个长度。

于 2013-10-29T19:10:32.847 回答
1

执行此操作的典型方法是创建一个byte[]数组并使用它来传输数据:

byte[] buffer = new byte[4096]; // 4K buffer...
int len = 0;
while ((len = input.read(buffer)) >= 0) {
   output.write(buffer, 0, len);
}
output.flush();

这会将每个循环中的一些字节从输入复制到输出,直到您用完输入。

缓冲区的大小是一个可调参数,您应该在您的环境中对其进行测试,看看哪种效果最好。

于 2013-10-29T19:10:08.467 回答