gpt4 book ai didi

java - 图片上传问题

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

我正在编写代码以将文件作为 BLOB 上传到 Oracle,但在保存该文件时,它给了我异常 java.sql.SQLException: ORA-01460: 未实现或不合理

以下是将我的 blob 类型转换为 byteArray 的函数

private byte[] convertToByteArray(Blob fromBlob) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
return convertToByteArrayImpl(fromBlob, baos);
} catch (SQLException e) {
throw new RuntimeException(e);
} catch (IOException e) {
throw new RuntimeException(e);
} finally {
if (baos != null) {
try {
baos.close();
} catch (IOException ex) {
}
}
}
}
private byte[] convertToByteArrayImpl(Blob fromBlob, ByteArrayOutputStream baos)
throws SQLException, IOException {
byte[] buf = new byte[4000];
InputStream is = fromBlob.getBinaryStream();
try {
for (;;) {
int dataSize = is.read(buf);

if (dataSize == -1)
break;
baos.write(buf, 0, dataSize);
}
} finally {
if (is != null) {
try {
is.close();
} catch (IOException ex) {
}
}
}
return baos.toByteArray();

}

我认为这是因为我的字节长度超过了 4000,但是,保存超过 4000 字节的解决方案是什么?

最佳答案

在早期版本的 Oracle 中使用 BLOB 的怪癖之一是我们无法在 insert 语句中包含完整的 BLOB。它必须是一个两个阶段的过程。

4000 字节限制是关键,因为该数字是 Oracle 认为的 SQL 数据类型的上限。因此,Oracle 可以在不抢夺的情况下处理 4000 字节或更少的 LOB,但如果我们要求它接受更大的 LOB,则会抛出 ORA-01460 异常。解决方法是插入带有 empty_blob() 占位符的行,然后更新新行。

insert into t42 (id, blob_col) values (1, empty_blob());

update t42
set blob_col = some_blob_variable
where id = 1;

这可能是导致您出现问题的原因;如果不查看整个代码,很难判断。

注意:据我所知,上述内容不适用于 Oracle 11g:我们现在可以轻松插入包含超大 BLOB 的行。

关于java - 图片上传问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2220341/

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