Это то, что я пытаюсь сделать:
- Чтение изображения из BLOB-объекта оракула
- Изменение размера
- Запись изображения с измененным размером обратно в таблицу(обновить сам большой двоичный объект).
Моя таблица выглядит следующим образом:
ТЕХНИЧЕСКИЙ НЕ НУЛЬ НОМЕР (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.