Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.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 图像上传问题_Java_Oracle_Hibernate - Fatal编程技术网

Java 图像上传问题

Java 图像上传问题,java,oracle,hibernate,Java,Oracle,Hibernate,我正在编写代码,以将文件作为BLOB上传到oracle上,但在保存该文件时,给了我异常java.sql.SQLException:ORA-01460:未实现或不合理 以下是将我的blob类型转换为byteArray的函数 private byte[] convertToByteArray(Blob fromBlob) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); try { retur

我正在编写代码,以将文件作为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异常。解决方法是插入带有
空\u 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的行

您使用的是什么版本的Oracle JDBC驱动程序?我使用的是Oracle 10G和ojdbc14.jar生成
ORA-01460
的代码是什么样子的?不确定,这会解决问题,但请尝试下载与您的db安装相关的驱动程序。例如。;10g 10.1.0.5 v/s 10g 10.1.0.2