0

これが私がやろうとしていることです:

  1. オラクルBLOBから画像を読み取ります
  2. サイズを変更します
  3. サイズ変更された画像をテーブルに書き戻します(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で実行されています。

4

1 に答える 1

1

OK、私はついにこれを解決することができました。エラーの原因となったのは危険な JDBC オラクル ドライバー (明らかに以前のバージョン) であることが判明しました。

適切なバージョンに切り替えるとすぐに、エラーは消えました!

于 2011-02-23T14:01:27.797 に答える