これが私がやろうとしていることです:
- オラクルBLOBから画像を読み取ります
- サイズを変更します
- サイズ変更された画像をテーブルに書き戻します(blob自体を更新します)。
私のテーブルは次のようになります。
TECHID NOT NULL NUMBER(12)
MEDIADATA NOT NULL BLOB()
INSERTEDDATE NOT NULL DATE
MODIFIEDDATE NOT NULL DATE
手順1と2は完全に機能します。ステップ3のコードは次のとおりです(これはPoCタイプのスパイクソリューションであり、最終的な製品ではありません)。
サイズ変更されたファイル=サイズ変更された画像を取得 FileInputStream fis = new FileInputStream(resized) PreparedStatement p = db.connection.prepareStatement( "update mymediadata set mediadata =?where TECHID = 142") if(fis!= null) {{ println( "Available:$ {fis.available()}"); //これは機能します-使用可能な117Kバイトを示します。 } p.setBinaryStream(1、fis、resizeed?.length()?. intValue()) 試す {{ p.executeUpdate() } キャッチ(例外e) {{ e.printStackTrace() } ついに {{ p.close() fis.close() }
手順3に進むと、次のエラーが発生します。
SQLException:ORA-01407:("OWNER"。"MEDIADATA"。"MEDIADATA")をNULLに更新できません
FileInputStream(fis)がnullでないことを(デバッガーで)明示的にチェックしました。また、resized?.length()?.intValue()
値も0より大きいことを確認しました。そのため、何が間違っているのかを確認するのに苦労しています。
テクノロジースタック:
Groovy GDK 1.7 Java 1.5 Oracle 10g
32ビットWindowsXPで実行されています。