Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将InputStream放入BufferedOutputStream以上载到Blob_Java_Oracle_Inputstream_Outputstream - Fatal编程技术网

Java 将InputStream放入BufferedOutputStream以上载到Blob

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

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

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

到目前为止,我所尝试的:

我已经尝试过使用这个答案:连接流,但是结果是一个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可能不是调用流内读取的正确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?参数已保存日期。谢谢你们两位