gpt4 book ai didi

java - 如何将 java.io.InputStream 转换为 java.sql.Blob

转载 作者:行者123 更新时间:2023-12-05 08:13:01 25 4
gpt4 key购买 nike

如何使用纯 Java 将 java.io.InputStream 转换为 java.sql.Blob

为了响应 tbodt 的建议,我通过 eclipse 调试器运行了以下命令。调试器显示 myinputstream 有内容,但 blob 在代码末尾仍然是 null。我需要做什么来解决这个问题?

byte[] contents;
ByteArrayOutputStream output = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int count;
while ((count = myinputstream.read(buffer)) != -1){output.write(buffer, 0, count);}//debugger says myinputstream has blksize 16384, buffcount 12742, and max 127394 here
contents = output.toByteArray();
Blob blob = null;
try {blob = new SerialBlob(contents);}
catch (SerialException e) {e.printStackTrace();}
catch (SQLException e) {e.printStackTrace();}

someObject.setSomeBlobProperty(blob);//debugger says blob is null here

我还通过调试器运行了 IOUtils 方法,但得到了完全相同的结果,有一个 null blob 但填充了一个 我的输入流。我该如何解决这个问题?

Blob blob = null;
try {
blob = new SerialBlob(IOUtils.toByteArray(myinputstream));//debugger says myinputstream has contents here.
someObject.setSomeBlobProperty(blob);//debugger says blob is null here
}
catch (SerialException e) {e.printStackTrace();}
catch (SQLException e) {e.printStackTrace();}

在这两种情况下,调试器都说 myinputstreamblksize 为 16384,buffcount 为 12742,max 为 127394指示的位置,尽管 blob 仍然是 null。运行此代码后,我还检查了底层 MySQL 数据库,确认 blob 字段为空。

然后我通过 Eclipse 调试器运行以下命令,它显示名为 contentbyte[] 在尝试填充它之后仍然是空的。所以生成的 blob 是空的,而 inputstream 确实继续具有如上所示的相同内容值:

Blob blob = null;
byte[] content = IOUtils.toByteArray(myinputstream);
try {
blob = new SerialBlob(content);//debugger says content is empty here
someObject.setSomeBlobProperty(blob);//debugger says blob is empty here.
}//debugger says myinputstream has the same values as in edit#1
catch (SerialException e) {e.printStackTrace();}
catch (SQLException e) {e.printStackTrace();}

最佳答案

简单的方法:

contents = IOUtils.toByteArray(in);

但为此,您需要 Apache Commons IO,这可能很难添加。如果您不想或不能使用它,可以通过以下一种方法自行使用;

ByteArrayOutputStream output = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int count;
while ((count = input.read(buffer)) != -1)
output.write(buffer, 0, count);
contents = output.toByteArray();

关于java - 如何将 java.io.InputStream 转换为 java.sql.Blob,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27934293/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com