JDBC 2.0ではjava.sql.BlobはSQLのBLOB(binary large object)型に対応して、java.sql.ClobはSQLのCLOB(character large object)型に対応します。
java.sql.Blobとjava.sql.Clobは情報(large object)全体ではなく、それへの論理的なポインタを表します。Derbyでは一時に唯一つのデータページだけがメモリ上で処理されます。BLOBの情報の最初の数バイトを読み書きするのに、LOB全体が処理される必要はありません。
加えて文字列とBLOBの間で型変換を行うことは推奨されません。なぜなら型変換はプラットフォーム・データベースに依存するからです。
Derbyはユニコード文字列(1文字2バイト)を使いますが、他のデータベース製品はASCII文字(1文字あたり1バイト)を使うかもしれません。使われる文字コードの種類によっては一文字が数バイトを必要とすることも考えられます。文字列を記録する為に、Derbyでは他より大きなBLOBの型を必要とする場合があります。 文字列を記録する場合はCLOB型を利用するべきです。
Derbyでは、CallableStatementのsetおよびgetメソッドを除いた、以下のJDBC 2.0のインターフェイスのメソッドが実装されています。
推奨事項: java.sql.Blobとjava.sql.Clobの生存期間はトランザクションがコミットされるとき終了するので、java.sql.Blobおよびjava.sql.Clobを利用するときは自動コミットを切って下さい。
返り値 | シグネチャ | 実装の覚書 |
---|---|---|
InputStream | getBinaryStream() | |
byte[] | getBytes(long pos, int length) | pos < 1だったり、posがlengthより大きかったり、length <= 0であった場合、例外が発生します。 |
long | length() | |
long | position(byte[] pattern, long start) | pattern == nullであったり、start < 1であったり、patternの配列長が0であった場合、例外が発生します。 |
long | position(Blob pattern, long start) | pattern == nullだったり、start < 1だったり、patternの長さが0であったり、patternの最初の数バイトを読むとき例外が起きると、例外が発生します。 |
返り値 | シグネチャ | 実装上の覚書 |
---|---|---|
InputStream | getAsciiStream() | |
Reader | getCharacterStream() | |
String | getSubString(long pos, int length) | pos < 1だったり、posが Clobの長さより大きかったり、length <= 0であった場合、例外が発生します。 |
long | length() | |
long | position(Clob searchstr, long start) | searchStr == nullだったりstart < 1だったり、searchStr の長さが0だったり、searchStrの最初の数バイトを読むとき例外が起きると、例外が発生します。 |
long | position(String searchstr, long start) | searchStr == nullだったり、start < 1だったり、patternが空文字列であった場合、例外が発生します。 |