public interface LobHandler
BLOB および CLOB のアクセサーメソッドを提供し、LobCreator インスタンスのファクトリとして機能し、BLOB または CLOB を作成するためのセッションとして使用されます。LobCreators は通常、ステートメントの実行ごとまたはトランザクションごとにインスタンス化されます。実行後に解放するために割り当てられたデータベースリソースを追跡する可能性があるため、スレッドセーフではありません。
ほとんどのデータベース / ドライバーは DefaultLobHandler
で動作するはずです。これはデフォルトで JDBC のダイレクトアクセサーメソッドに委譲され、java.sql.Blob
および java.sql.Clob
API を完全に回避します。DefaultLobHandler
は、"wrapAsLob"
プロパティを設定することで、PreparedStatement.setBlob/setClob
(PostgreSQL など)を使用して LOB にアクセスするように構成することもできます。
もちろん、データベースごとに異なるフィールド型を宣言する必要があります。Oracle では、バイナリコンテンツは BLOB に入れる必要があり、4000 バイトを超えるすべての文字コンテンツは CLOB に入れる必要があります。MySQL では、CLOB 型の概念はなく、VARCHAR のように動作する LONGTEXT 型があります。完全な移植性のために、フィールドサイズのために一部のデータベースで LOB を通常必要とする可能性のあるフィールドには LobHandler を使用します(ガイドラインとして Oracle の数値を使用します)。
推奨オプションの要約(実際の LOB フィールドの場合):
DefaultLobHandler
を使用します。LOB フィールドにデータを入力するときにデータベースドライバーがそのヒントを必要とする場合は、streamAsLob=true
を使用する可能性があります。(Oracle)データベースのセットアップで LOB サイズの制限に遭遇した場合は、createTemporaryLob=true
にフォールバックしてください。DefaultLobHandler
を使用します。Oracle 10.1 で、"SetBigStringTryClob" 接続プロパティを設定します。Oracle 10.2 以降、DefaultLobHandler は標準の設定でそのまま動作します。wrapAsLob=true
を使用して DefaultLobHandler
を構成し、その LobHandler を使用してデータベーステーブルの OID 列(BYTEA ではない)にアクセスします。DefaultLobHandler
を使用するだけです。修飾子と型 | メソッドと説明 |
---|---|
InputStreamSE | getBlobAsBinaryStream(ResultSetSE rs, int columnIndex) 指定された ResultSet から、指定された列をバイナリストリームとして取得します。 |
InputStreamSE | getBlobAsBinaryStream(ResultSetSE rs, StringSE columnName) 指定された ResultSet から、指定された列をバイナリストリームとして取得します。 |
byte[] | getBlobAsBytes(ResultSetSE rs, int columnIndex) 指定された ResultSet から指定された列をバイトとして取得します。 |
byte[] | getBlobAsBytes(ResultSetSE rs, StringSE columnName) 指定された ResultSet から指定された列をバイトとして取得します。 |
InputStreamSE | getClobAsAsciiStream(ResultSetSE rs, int columnIndex) 指定された ResultSet から指定された列を ASCII ストリームとして取得します。 |
InputStreamSE | getClobAsAsciiStream(ResultSetSE rs, StringSE columnName) 指定された ResultSet から指定された列を ASCII ストリームとして取得します。 |
ReaderSE | getClobAsCharacterStream(ResultSetSE rs, int columnIndex) 指定された ResultSet から、指定された列を文字ストリームとして取得します。 |
ReaderSE | getClobAsCharacterStream(ResultSetSE rs, StringSE columnName) 指定された ResultSet から、指定された列を文字ストリームとして取得します。 |
StringSE | getClobAsString(ResultSetSE rs, int columnIndex) 指定された ResultSet から指定された列を文字列として取得します。 |
StringSE | getClobAsString(ResultSetSE rs, StringSE columnName) 指定された ResultSet から指定された列を文字列として取得します。 |
LobCreator | getLobCreator() 新しい LobCreator インスタンスを作成します。 |
@Nullable byte[] getBlobAsBytes(ResultSetSE rs, StringSE columnName) throws SQLExceptionSE
ResultSet.getBytes
を呼び出すか、ResultSet.getBlob
を操作する場合があります。rs
- コンテンツを取得する ResultSetcolumnName
- 使用する列名 null
SQLExceptionSE
- JDBC メソッドによってスローされた場合 ResultSet.getBytes(int)
SE@Nullable byte[] getBlobAsBytes(ResultSetSE rs, int columnIndex) throws SQLExceptionSE
ResultSet.getBytes
を呼び出すか、ResultSet.getBlob
を操作する場合があります。rs
- コンテンツを取得する ResultSetcolumnIndex
- 使用する列インデックス null
SQLExceptionSE
- JDBC メソッドによってスローされた場合 ResultSet.getBytes(int)
SE@Nullable InputStreamSE getBlobAsBinaryStream(ResultSetSE rs, StringSE columnName) throws SQLExceptionSE
ResultSet.getBinaryStream
を呼び出すか、ResultSet.getBlob
を操作します。rs
- コンテンツを取得する ResultSetcolumnName
- 使用する列名 null
SQLExceptionSE
- JDBC メソッドによってスローされた場合 ResultSet.getBinaryStream(int)
SE@Nullable InputStreamSE getBlobAsBinaryStream(ResultSetSE rs, int columnIndex) throws SQLExceptionSE
ResultSet.getBinaryStream
を呼び出すか、ResultSet.getBlob
を操作します。rs
- コンテンツを取得する ResultSetcolumnIndex
- 使用する列インデックス null
SQLExceptionSE
- JDBC メソッドによってスローされた場合 ResultSet.getBinaryStream(int)
SE@Nullable StringSE getClobAsString(ResultSetSE rs, StringSE columnName) throws SQLExceptionSE
ResultSet.getString
を呼び出すか、ResultSet.getClob
を操作します。rs
- コンテンツを取得する ResultSetcolumnName
- 使用する列名 null
SQLExceptionSE
- JDBC メソッドによってスローされた場合 ResultSet.getString(int)
SE@Nullable StringSE getClobAsString(ResultSetSE rs, int columnIndex) throws SQLExceptionSE
ResultSet.getString
を呼び出すか、ResultSet.getClob
を操作します。rs
- コンテンツを取得する ResultSetcolumnIndex
- 使用する列インデックス null
SQLExceptionSE
- JDBC メソッドによってスローされた場合 ResultSet.getString(int)
SE@Nullable InputStreamSE getClobAsAsciiStream(ResultSetSE rs, StringSE columnName) throws SQLExceptionSE
ResultSet.getAsciiStream
を呼び出すか、ResultSet.getClob
を操作します。rs
- コンテンツを取得する ResultSetcolumnName
- 使用する列名 null
SQLExceptionSE
- JDBC メソッドによってスローされた場合 ResultSet.getAsciiStream(int)
SE@Nullable InputStreamSE getClobAsAsciiStream(ResultSetSE rs, int columnIndex) throws SQLExceptionSE
ResultSet.getAsciiStream
を呼び出すか、ResultSet.getClob
を操作します。rs
- コンテンツを取得する ResultSetcolumnIndex
- 使用する列インデックス null
SQLExceptionSE
- JDBC メソッドによってスローされた場合 ResultSet.getAsciiStream(int)
SEReaderSE getClobAsCharacterStream(ResultSetSE rs, StringSE columnName) throws SQLExceptionSE
ResultSet.getCharacterStream
を呼び出すか、ResultSet.getClob
を操作します。rs
- コンテンツを取得する ResultSetcolumnName
- 使用する列名 SQLExceptionSE
- JDBC メソッドによってスローされた場合 ResultSet.getCharacterStream(int)
SEReaderSE getClobAsCharacterStream(ResultSetSE rs, int columnIndex) throws SQLExceptionSE
ResultSet.getCharacterStream
を呼び出すか、ResultSet.getClob
を操作します。rs
- コンテンツを取得する ResultSetcolumnIndex
- 使用する列インデックス SQLExceptionSE
- JDBC メソッドによってスローされた場合 ResultSet.getCharacterStream(int)
SELobCreator getLobCreator()
LobCreator
インスタンス、つまり BLOB と CLOB を作成するためのセッションを作成します。作成された LOB が不要になった後、通常はステートメントの実行後またはトランザクションの補完後に閉じる必要があります。LobCreator.close()