public class DefaultLobHandler extends AbstractLobHandler
LobHandler
インターフェースのデフォルト実装。java.sql.ResultSet
および java.sql.PreparedStatement
が提供するダイレクトアクセサーメソッドを呼び出します。 デフォルトでは、受信ストリームは JDBC ドライバーの PreparedStatement
SE 上の適切な setBinary/Ascii/CharacterStream
メソッドに渡されます。指定されたコンテンツの長さが負の場合、このハンドラーは長さパラメーターなしで set-stream メソッドの JDBC 4.0 バリアントを使用します。それ以外の場合は、指定された長さをドライバーに渡します。
この LobHandler は、単純な BLOB および CLOB 処理に関する仕様の提案に関して、JDBC に準拠しているすべての JDBC ドライバーで機能するはずです。これは、Oracle 9i のドライバーにはまったく適用されません。Oracle 10g の時点では機能しますが、LOB サイズの制限がある場合があります。古いデータベースサーバーに対して作業する場合でも、最近の Oracle ドライバーの使用を検討してください。推奨事項の完全なセットについては、LobHandler
javadoc を参照してください。
一部の JDBC ドライバーでは、BLOB/CLOB ターゲット列を持つ値を、JDBC setBlob
/ setClob
API を介して明示的に設定する必要があります(たとえば、PostgreSQL のドライバー)。このようなドライバーに対して操作する場合は、"wrapAsLob"
プロパティを "true" に切り替えます。
JDBC 4.0 では、この LobHandler は、ストリーム引数を直接取る setBlob
/ setClob
バリアントを介した BLOB/CLOB コンテンツのストリーミングもサポートします。完全に準拠した JDBC 4.0 ドライバーに対して操作する場合は、"streamAsLob"
プロパティを "true" に切り替えることを検討してください。
最後に、この LobHandler は一時的な BLOB/CLOB オブジェクトの作成もサポートしています。"streamAsLob" が LOB サイズの制限に達した場合は、"createTemporaryLob"
プロパティを "true" に切り替えることを検討してください。
推奨事項の概要については、LobHandler
インターフェースの javadoc を参照してください。
ResultSet.getBytes(int)
SE, ResultSet.getBinaryStream(int)
SE, ResultSet.getString(int)
SE, ResultSet.getAsciiStream(int)
SE, ResultSet.getCharacterStream(int)
SE, PreparedStatement.setBytes(int, byte[])
SE, PreparedStatement.setBinaryStream(int, java.io.InputStream, int)
SE, PreparedStatement.setString(int, java.lang.String)
SE, PreparedStatement.setAsciiStream(int, java.io.InputStream, int)
SE, PreparedStatement.setCharacterStream(int, java.io.Reader, int)
SE修飾子と型 | クラスと説明 |
---|---|
protected class | DefaultLobHandler.DefaultLobCreator 内部クラスとしてのデフォルトの LobCreator 実装。 |
コンストラクターと説明 |
---|
DefaultLobHandler() |
修飾子と型 | メソッドと説明 |
---|---|
InputStreamSE | getBlobAsBinaryStream(ResultSetSE rs, int columnIndex) 指定された ResultSet から、指定された列をバイナリストリームとして取得します。 |
byte[] | getBlobAsBytes(ResultSetSE rs, int columnIndex) 指定された ResultSet から指定された列をバイトとして取得します。 |
InputStreamSE | getClobAsAsciiStream(ResultSetSE rs, int columnIndex) 指定された ResultSet から指定された列を ASCII ストリームとして取得します。 |
ReaderSE | getClobAsCharacterStream(ResultSetSE rs, int columnIndex) 指定された ResultSet から、指定された列を文字ストリームとして取得します。 |
StringSE | getClobAsString(ResultSetSE rs, int columnIndex) 指定された ResultSet から指定された列を文字列として取得します。 |
LobCreator | getLobCreator() 新しい LobCreator インスタンスを作成します。 |
void | setCreateTemporaryLob(boolean createTemporaryLob) バイト配列 / 文字列を、JDBC 4.0 createBlob / createClob メソッドを介して作成された一時的な JDBCBlob/Clob オブジェクトにコピーするかどうかを指定します。 |
void | setStreamAsLob(boolean streamAsLob) ストリーム引数を指定した JDBC 4.0 setBlob / setClob メソッドを使用して、バイナリストリーム / 文字ストリームを明示的な LOB コンテンツとして JDBC ドライバーに送信するかどうかを指定します。 |
void | setWrapAsLob(boolean wrapAsLob) Blob/Clob 引数を指定した JDBC setBlob / setClob メソッドを使用して、JDBC Blob/Clob オブジェクトにラップされた JDBC ドライバーにバイト配列 / 文字列を送信するかどうかを指定します。 |
getBlobAsBinaryStream, getBlobAsBytes, getClobAsAsciiStream, getClobAsCharacterStream, getClobAsString
cloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, toStringSE, waitSE, waitSE, waitSE
protected final Log logger
public void setWrapAsLob(boolean wrapAsLob)
setBlob
/ setClob
メソッドを使用して、JDBC Blob/Clob オブジェクトにラップされた JDBC ドライバーにバイト配列 / 文字列を送信するかどうかを指定します。 デフォルトは "false" で、コンテンツの設定に一般的な JDBC 2.0 setBinaryStream
/ setCharacterStream
メソッドを使用します。このような折り返しが必要であることがわかっている JDBC ドライバーに対する明示的な Blob/Clob 折り返しの場合はこれを "true" に切り替えます(たとえば、OID 列にアクセスするための PostgreSQL であるのに対し、BYTEA 列には標準的な方法でアクセスする必要があります)。
この設定は、バイト配列 / 文字列引数とストリーム引数に影響します。ただし、"streamAsLob"
がこの処理をオーバーライドして JDBC 4.0 の新しい明示的なストリーミングサポート(使用可能な場合)を使用する場合を除きます。
public void setStreamAsLob(boolean streamAsLob)
setBlob
/ setClob
メソッドを使用して、バイナリストリーム / 文字ストリームを明示的な LOB コンテンツとして JDBC ドライバーに送信するかどうかを指定します。 デフォルトは "false" で、コンテンツの設定に一般的な JDBC 2.0 setBinaryStream
/ setCharacterStream
メソッドを使用します。JDBC ドライバーが実際にこれらの JDBC 4.0 操作(Derby など)をサポートしている場合は、明示的な JDBC4.0 ストリーミングの場合はこれを "true" に切り替えます。
この設定は、JDBC 4.0 サポートを必要とするバイト引数 / 文字列引数だけでなく、ストリーム引数にも影響します。JDBC 3.0 に対する LOB コンテンツのサポートについては、"wrapAsLob"
設定を確認してください。
public void setCreateTemporaryLob(boolean createTemporaryLob)
createBlob
/ createClob
メソッドを介して作成された一時的な JDBCBlob/Clob オブジェクトにコピーするかどうかを指定します。 デフォルトは "false" で、コンテンツの設定に一般的な JDBC 2.0 setBinaryStream
/ setCharacterStream
メソッドを使用します。JDBC 4.0 を使用して明示的な Blob/Clob を作成するには、これを "true" に切り替えます。
この設定は、JDBC 4.0 サポートを必要とするバイト引数 / 文字列引数だけでなく、ストリーム引数にも影響します。JDBC 3.0 に対する LOB コンテンツのサポートについては、"wrapAsLob"
設定を確認してください。
@Nullable public byte[] getBlobAsBytes(ResultSetSE rs, int columnIndex) throws SQLExceptionSE
LobHandler
ResultSet.getBytes
を呼び出すか、ResultSet.getBlob
を操作する場合があります。rs
- コンテンツを取得する ResultSetcolumnIndex
- 使用する列インデックス null
SQLExceptionSE
- JDBC メソッドによってスローされた場合 ResultSet.getBytes(int)
SE@Nullable public InputStreamSE getBlobAsBinaryStream(ResultSetSE rs, int columnIndex) throws SQLExceptionSE
LobHandler
ResultSet.getBinaryStream
を呼び出すか、ResultSet.getBlob
を操作します。rs
- コンテンツを取得する ResultSetcolumnIndex
- 使用する列インデックス null
SQLExceptionSE
- JDBC メソッドによってスローされた場合 ResultSet.getBinaryStream(int)
SE@Nullable public StringSE getClobAsString(ResultSetSE rs, int columnIndex) throws SQLExceptionSE
LobHandler
ResultSet.getString
を呼び出すか、ResultSet.getClob
を操作します。rs
- コンテンツを取得する ResultSetcolumnIndex
- 使用する列インデックス null
SQLExceptionSE
- JDBC メソッドによってスローされた場合 ResultSet.getString(int)
SEpublic InputStreamSE getClobAsAsciiStream(ResultSetSE rs, int columnIndex) throws SQLExceptionSE
LobHandler
ResultSet.getAsciiStream
を呼び出すか、ResultSet.getClob
を操作します。rs
- コンテンツを取得する ResultSetcolumnIndex
- 使用する列インデックス null
SQLExceptionSE
- JDBC メソッドによってスローされた場合 ResultSet.getAsciiStream(int)
SEpublic ReaderSE getClobAsCharacterStream(ResultSetSE rs, int columnIndex) throws SQLExceptionSE
LobHandler
ResultSet.getCharacterStream
を呼び出すか、ResultSet.getClob
を操作します。rs
- コンテンツを取得する ResultSetcolumnIndex
- 使用する列インデックス SQLExceptionSE
- JDBC メソッドによってスローされた場合 ResultSet.getCharacterStream(int)
SEpublic LobCreator getLobCreator()
LobHandler
LobCreator
インスタンス、つまり BLOB と CLOB を作成するためのセッションを作成します。作成された LOB が不要になった後、通常はステートメントの実行後またはトランザクションの完了後に閉じる必要があります。LobCreator.close()