Обновление Oracle BLOB с помощью файлов изображений - PullRequest
0 голосов
/ 22 февраля 2011

Это то, что я пытаюсь сделать:

  1. Чтение изображения из BLOB-объекта оракула
  2. Изменение размера
  3. Запись изображения с измененным размером обратно в таблицу(обновить сам большой двоичный объект).

Моя таблица выглядит следующим образом:

ТЕХНИЧЕСКИЙ НЕ НУЛЬ НОМЕР (12)

MEDIADATA NOT NULL BLOB ()

INSERTEDDATE NOT NULL DATE

MODIFIEDDATE NOT NULL DATE

Шаги 1 и 2 работают отлично.Код для шага 3 выглядит следующим образом (это решение с шипами типа PoC, а не конечное производство):

File resized =  get the resized image
FileInputStream fis = new FileInputStream(resized)
PreparedStatement p = db.connection.prepareStatement("update mymediadata set mediadata = ? where TECHID=142") 
if (fis != null)
{
  println("Available: ${fis.available()}"); // this works - shows 117K bytes available.
}
p.setBinaryStream (1, fis, resized?.length()?.intValue())
try
{
  p.executeUpdate()
}
catch (Exception e)
{
  e.printStackTrace()
}
finally
{
  p.close()
  fis.close()
}



Когда я перехожу к шагу 3, я получаю следующую ошибку:

SQLException: ORA-01407: невозможно обновить ("OWNER". "MEDIADATA". "MEDIADATA") до NULL

Я явно проверил (в отладчике), что FileInputStream (fis) не является нулевым.Я также проверил, что значение resized?.length()?.intValue() также> 0. Поэтому я изо всех сил пытаюсь понять, что я могу делать неправильно.

Технологический стек:

Groovy GDK 1.7 Java 1.5 Oracle 10g

Работает на 32-битной Windows XP.

1 Ответ

1 голос
/ 23 февраля 2011

ОК, мне наконец удалось решить эту проблему. Оказывается, это был хитрый драйвер JDBC oracle (очевидно, более ранняя версия), который вызывал ошибки.

Как только я перешел на правильную версию, ошибка исчезла!

...