проблема загрузки изображения - PullRequest
1 голос
/ 08 февраля 2010

Я пишу код для загрузки файла на oracle как BLOB, но при сохранении этого файла я получаю исключение java.sql.SQLException: ORA-01460: не реализовано или неразумно

ниже приведены функции для преобразования типа моего блоба в 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 байтов?

1 Ответ

0 голосов
/ 09 февраля 2010

Одна из особенностей работы с BLOB в более ранних версиях Oracle заключалась в том, что мы не могли включить полный BLOB в оператор insert. Это должен был быть двухэтапный процесс.

Ключевым является ограничение в 4000 байт, поскольку эта цифра является верхней границей того, что Oracle считает типом данных SQL. Таким образом, Oracle может обрабатывать большие объекты размером 4000 байт или меньше без рывка, но создает исключение 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;

Это может быть причиной вашей проблемы; Трудно сказать, не видя весь ваш код.

NB. Насколько я могу судить, предыдущее не относится к Oracle 11g: теперь мы можем легко вставлять строки, содержащие большие BLOB-объекты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...