图片上传问题

我书面方式代码上传文件的Oracle作为BLOB但同时保存该文件它给我的异常值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中使用BLOBs的怪癖之一是我们无法在insert语句中包含完整的BLOB。它必须是一个两阶段的过程。

4000字节的限制是关键,因为该数字是Oracle认为是SQL数据类型的上限。因此,如果我们要求它接受更大的LOB,Oracle可以处理4000个字节或更少的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的行。

以上是 图片上传问题 的全部内容, 来源链接: utcz.com/qa/260798.html

回到顶部