Java 将InputStream放入BufferedOutputStream以上载到Blob
我有一个InputStream,我知道它是一个PDF,我需要用它来更新Oracle中的Blob。如何将此流转换为BufferedOutputStream,或以其他方式使用此流信息更新Blob 请注意,由于代码的限制,我不允许在代码中包装Oracle类 到目前为止,我所尝试的: 我已经尝试过使用这个答案:连接流,但是结果是一个NullPointerError,因为OutputStream是空的 我正在尝试运行的当前查询:Java 将InputStream放入BufferedOutputStream以上载到Blob,java,oracle,inputstream,outputstream,Java,Oracle,Inputstream,Outputstream,我有一个InputStream,我知道它是一个PDF,我需要用它来更新Oracle中的Blob。如何将此流转换为BufferedOutputStream,或以其他方式使用此流信息更新Blob 请注意,由于代码的限制,我不允许在代码中包装Oracle类 到目前为止,我所尝试的: 我已经尝试过使用这个答案:连接流,但是结果是一个NullPointerError,因为OutputStream是空的 我正在尝试运行的当前查询: pstmt = dbConn.prepareStatement("UPDAT
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可能不是调用流内读取的正确oracle方法,不幸的是,我对oracle的掌握程度不如我所希望的,因此我不知道应该使用正确的cast 执行此操作的典型方法是创建
字节[]
数组并使用它传输数据:
byte[] buffer = new byte[4096]; // 4K buffer...
int len = 0;
while ((len = input.read(buffer)) >= 0) {
output.write(buffer, 0, len);
}
output.flush();
这会将每个循环中的一些字节从输入复制到输出,直到输入用完为止
缓冲区的大小是一个可调参数,您应该在您的环境中对其进行测试,以确定哪些参数最有效。实现这一点的典型方法是创建
字节[]
数组并使用它传输数据:
byte[] buffer = new byte[4096]; // 4K buffer...
int len = 0;
while ((len = input.read(buffer)) >= 0) {
output.write(buffer, 0, len);
}
output.flush();
这会将每个循环中的一些字节从输入复制到输出,直到输入用完为止
缓冲区的大小是一个可调参数,您应该在您的环境中测试该参数,以查看哪些参数最有效。
像setString和其他setter。没有输出流,但需要长度。
像setString和其他setter。没有输出流,但是需要长度。您已经对我的代码进行了注释,以便将数据从一个流复制到另一个流-请在您的问题中包括您到目前为止尝试的内容。您已经对我的代码进行了注释,以便将数据从一个流复制到另一个流-请在您的问题中包括您到目前为止尝试的内容。parameterIndex是否是位置在数据库里?另外,我需要执行这个语句,还是它会按原样工作?不管怎样,rolfl提醒我需要包含一个?在我准备好的语句中,使其成为参数。谢谢。:)parameterIndex是数据库中的位置吗?另外,我需要执行这个语句,还是它会按原样工作?不管怎样,rolfl提醒我需要包含一个?在我准备好的语句中,使其成为参数。谢谢。:)不幸的是,这向我返回了一个空错误,因为输出流是空的。两件事:正如Joop所建议的,使用一个位置准备语句(创建准备语句时请参见
?
参数),并找出输出流为null/closed的原因,它不应该为null/closed?参数已保存日期。谢谢你们两位不幸的是,这向我返回了一个空错误,因为输出流是空的。两件事:正如Joop所建议的,使用一个位置准备语句(创建准备语句时请参见?
参数),并找出输出流为null/closed的原因,它不应该为null/closed?参数已保存日期。谢谢你们两位