java.sql.Blobとjava.sql.Clobの対応に関する但し書き

のロック機構(共有ロック)にて、java.sql.Blobjava.sql.Clobが指し示すデータベース上の情報の更新や削除は防がれています。 しかしながら、の即時ロックの機構は、java.sql.Blobjava.sql.Clobに対応する列が守られていない瞬間の存在を許すことがあります。 引き続くgetBlob/getClobおよびjava.sql.Blob/java.sql.Clobの呼び出しは未定義な振る舞いを起こす可能性があります。

さらにjava.sql.Blob/java.sql.Clobを持つトランザクションが、(他のトランザクションに対して)、対応行を更新することを防ぐ機構はありません。(この問題はgetXXXStreamメソッドにも存在しています。) java.sql.Blob/java.sql.Clobが開いていており、アプリケーションプログラムにて対応する情報の更新が妨げられた場合、失敗したことにより予期せぬ振る舞いが起きる可能性があります。

ResultSet getXXXメソッドのうち以下の何れかに該当するメソッドは、それらを同一のカラムに対して複数回呼び出してははなりません。

これ等のメソッドは同一の対応するストリームを共有します。これらのメソッドを複数回呼び出すことにより、予期せぬ振る舞いを起こす可能性があります。 例を挙げます。 ResultSet rs = s.executeQuery("SELECT text FROM CLOBS WHERE i = 1"); while (rs.next()) { aclob=rs.getClob(1); ip = rs.getAsciiStream(1); }

サイズの大きな列の情報を扱うストリームはスレッドセーフではありません。従って、もしユーザが複数のスレッドを作成して、それらスレッドからストリームにアクセスした場合、未定義の動作を起こします。

Clobにはロケールによる振る舞いの違いがありません。