WebLogic Type 4 JDBC ドライバ ガイド
![]() |
![]() |
![]() |
![]() |
注意 : BEA WebLogic Type 4 JDBC Informix ドライバは WebLogic Server 8.1 サービス パック 2 以降のリリースで使用できます。WebLogic Server 8.1 GA およびサービス パック 1 のリリースでは使用できません。
以下の節では、BEA WebLogic Type 4 JDBC Informix ドライバのコンフィグレーション方法と使用方法について説明します。
BEA WebLogic Type 4 JDBC Informix ドライバ (「Informix ドライバ」) は Informix Dynamic Server 9.4 以降をサポートします。
BEA WebLogic Type 4 JDBC Informix ドライバのドライバ クラスは次のとおりです。
XA : weblogic.jdbcx.informix.InformixDataSource
非 XA : weblogic.jdbc.informix.InformixDriver
WebLogic Server ドメインで JDBC 接続プールをコンフィグレーションするときに、これらのドライバ クラスを使用します。
Informix データベースに接続するには、次の形式の URL を使用します。
jdbc:bea:informix://dbserver1:1543;informixServer=dbserver1;databaseName=dbname
表 3-1 では、Informix ドライバがサポートする JDBC 接続プロパティを示し、各プロパティについて説明します。WebLogic Server ドメインの JDBC 接続プールのコンフィグレーションでこれらの接続プロパティを使用できます。プロパティを指定するには、JDBC 接続プールのコンフィグレーションで次の形式を使用します。
property=value
注意 : すべての接続プロパティ名で大文字と小文字は区別されません。たとえば、Password は password と同じです。必須のプロパティには、その旨が記されています。各接続プロパティに付記されているデータ型は、JDBC 接続プールのプロパティ値で使用される Java データ型です。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
表 3-2 に、非 XA バージョンの WebLogic Type 4 Informix JDBC ドライバを使用する WebLogic Server 接続プールのサンプルのコンフィグレーション属性を示します。表 3-3 に、XA バージョンのドライバを使用する WebLogic Server 接続プールのサンプルのコンフィグレーション属性を示します。
|
|
|
|
|
|
|
|
|
|
|
|
インデックスの追加、プロシージャのリコンパイルなど、データベース テーブルやプロシージャを変更する操作が発生した場合、これらにアクセスする既存の JDBC Prepared Statement はすべて、再使用する前に再準備の工程を経る必要があります。これは Informix データベース管理システムの制限です。WebLogic Server では、プールされた接続と同様に、アプリケーションの Prepared Statement もキャッシュ、保持、再使用されます。ただし、削除後に再作成されたり定義が変更されたりしたテーブルやプロシージャにアクセスする Prepared Statement をアプリケーションで使用する場合は、キャッシュされた Prepared Statement を再実行するといったん失敗します。実行できなくなった PreparedStatement はその後キャッシュから削除され、アプリケーションでその PreparedStatement がもう一度要求されたときに置き換えられます。
WebLogic Server の実行時に DBMS 内のテーブルやプロシージャを変更したために Prepared Statement が失敗するのを防ぐには、[Statement キャッシュ サイズ] を 0 に設定します。これにより、リクエストのたびに新しい Prepared Statement が作成されるようになります。ただし、Statement キャッシュを無効にすると、Statement のキャッシングによるパフォーマンスの向上は見込めなくなります。
以下のリストで説明するように Informix ドライバに次の接続プロパティを設定すると、アプリケーションのパフォーマンスを向上させることができます。
スクロールインセンシティブな結果セットを扱う際のパフォーマンスを向上させるため、ドライバでは、結果セット データをディスクに書き込む代わりにメモリにキャッシュすることができます。デフォルトでは、インセンシティブな結果セット データのうち 2MB がメモリにキャッシュされ、その残りがディスクに書き込まれます。ドライバがデータをディスクに書き込む前に使用するメモリの量を増やすか、ドライバがインセンシティブな結果セット データをディスクに書き込まないように設定すると、パフォーマンスが向上します。最大キャッシュ サイズは 2GB です。
ドライバがアプリケーション サーバ内部から実行されるのでない場合、または独自の Prepared Statement のプールを提供しない別のアプリケーション内部から実行されるのでない場合は、パフォーマンスを向上させるため、ドライバ独自の内部 Prepared Statement のプールを有効にする必要があります。ドライバの内部 Prepared Statement のプールを有効にすると、ドライバは、アプリケーションによって作成された特定数の Prepared Statement をキャッシュします。たとえば、MaxPooledStatements
プロパティを 20 に設定した場合、ドライバは、アプリケーションによって作成された最後の 20 個の Prepared Statement をキャッシュします。このプロパティに設定された値が、アプリケーションが使用する Prepared Statement の数よりも大きい場合、すべての Prepared Statement がキャッシュされます。
Informix ドライバは、デフォルトでは、ResultSetMetaData.getTableName()
メソッドが呼び出されたとき、結果セットで各カラムの正しいテーブル名を返すために必要となる追加処理を省略します。そのため getTableName()
メソッドは、結果セットで各カラムについて空の文字列を返す場合があります。アプリケーションがテーブル名情報を必要としないことがわかっている場合は、デフォルト設定で最大限のパフォーマンスが得られます。
ResultSet メタデータを返す方法の詳細については、「ResultSet メタデータのサポート」を参照してください。
表 3-4 では、Informix ドライバでサポートされるデータ型を示し、JDBC データ型へどのようにマップされるかを示します。
データ型の詳細については、「getTypeInfo」を参照してください。
Informix ドライバでサポートされている SQL エスケープ シーケンスの詳細については、「JDBC の SQL エスケープ シーケンス」を参照してください。
Informix は、アイソレーション レベルとして Read Committed、Read Uncommitted、Repeatable Read、および Serializable をサポートしています。デフォルトは Read Committed です。
Informix ドライバは、スクロールセンシティブな結果セット、スクロールインセンシティブな結果セット、および更新可能な結果セットをサポートしています。
注意 : Informix ドライバが、要求された結果セットのタイプまたは同時実行性をサポートできない場合は、カーソルを自動的にダウングレードして詳細情報の入った SQLWarning を生成します。
Informix ドライバは、この節で説明するようにパラメータ メタデータを返すことができます。
Informix ドライバは、Insert 文および Update 文のパラメータ メタデータを返すことができます。
Informix ドライバは、ストアド プロシージャの引数についてはパラメータ メタデータを返すことができません。
Informix ドライバは、ANSI SQL 92 エントリレベルの述語 (比較、BETWEEN、IN、LIKE、EXISTS などの述語構文) で記述されたパラメータを含む Select 文のパラメータ メタデータを返すことができます。構文の詳細については、ANSI SQL に関するドキュメントを参照してください。
Select 文のパラメータ メタデータは、次のいずれかの条件に該当する場合に返すことができます。
SELECT * FROM foo WHERE bar > ?
SELECT * FROM foo WHERE (SELECT x FROM y WHERE z = 1) < ?
以下に、パラメータ メタデータを返すことのできる別の Select 文の例をいくつか示します。
SELECT col1, col2 FROM foo WHERE col1 = ? and col2 > ?
SELECT ... WHERE colname = (SELECT col2 FROM t2 WHERE col3 = ?)
SELECT ... WHERE colname LIKE ?
SELECT ... WHERE colname BETWEEN ? and ?
SELECT ... WHERE colname IN (?, ?, ?)
SELECT ... WHERE EXISTS(SELECT ... FROM T2 WHERE col1 < ?)
GROUP BY、HAVING、または ORDER BY を含む WHERE 句で ANSI SQL 92 エントリレベルの述語を使用している文がサポートされます。以下に例を示します。
SELECT * FROM t1 WHERE col = ? ORDER BY 1
SELECT * FROM t1,t2 WHERE t1.col1 = ?
完全修飾名とエイリアスがサポートされます。以下に例を示します。
SELECT a, b, c, d FROM T1 AS A, T2 AS B WHERE A.a = ?
and B.b = ?"
アプリケーションでテーブル名情報が必要な場合、Informix ドライバでは、Select 文の ResultSet メタデータでテーブル名情報を返すことができます。ResultSetMetaDataOptions
プロパティを 1 に設定すると、Informix ドライバは、ResultSetMetaData.getTableName()
メソッドが呼び出されたとき、結果セットで各カラムの正しいテーブル名を返すための追加処理を実行します。このように設定しない場合、getTableName()
メソッドは、結果セットで各カラムについて空の文字列を返す場合があります。
Informix ドライバが返すテーブル名情報は、結果セットのカラムがデータベース内のテーブルのカラムにマップされているかどうかによって異なります。Informix ドライバは、データベース内のテーブルのカラムにマップされている結果セットのカラムについては、そのカラムに関連付けられているテーブル名を返します。データベース内のテーブルのカラムにマップされていない結果セットのカラム (集約関数やリテラルなど) については、空の文字列を返します。
ResultSet メタデータを返す Select 文には、エイリアス、結合、および完全修飾名を含めることができます。以下のクエリの Select 文の場合、ResultSetMetaData.getTableName()
メソッドは、Select リストに指定されたカラムの正しいテーブル名を返します。
SELECT id, name FROM Employee
SELECT E.id, E.name FROM Employee E
SELECT E.id, E.name AS EmployeeName FROM Employee E
SELECT E.id, E.name, I.location, I.phone FROM Employee E,
EmployeeInfo I WHERE E.id = I.id
SELECT id, name, location, phone FROM Employee,
EmployeeInfo WHERE id = empId
SELECT Employee.id, Employee.name, EmployeeInfo.location,
EmployeeInfo.phone FROM Employee, EmployeeInfo
WHERE Employee.id = EmployeeInfo.id
ドライバは、生成された列については、テーブル名として空の文字列を返します。以下のクエリは、生成された列 (「upper」列) を含む結果セットを返す Select 文の例です。
SELECT E.id, E.name as EmployeeName, {fn UCASE(E.name)}
AS upper FROM Employee E
Informix ドライバでは、ResultSetMetaData.getSchemaName()
メソッドまたは ResultSetMetaData.getCatalogName()
メソッドが呼び出されたときに、スキーマ名情報またはカタログ名情報を返すこともできます (ドライバがこれらの情報を特定できる場合)。たとえば次の文の場合、Informix ドライバはカタログ名として「test」、スキーマ名として「test1」、テーブル名として「foo」を返します。
SELECT * FROM test.test1.foo
テーブル名、スキーマ名、およびカタログ名の情報を返すために必要となる追加処理は、ResultSetMetaData.getTableName()
、ResultSetMetaData.getSchemaName()
、または ResultSetMetaData.getCatalogName()
の各メソッドが呼び出された場合にのみ実行されます。
Informix ドライバでは、次のような RowSet インタフェースの JSR 114 実装をサポートしています。
JSR 114 の詳細については、http://www.jcp.org/en/jsr/detail?id=114 を参照してください。
Clob.position メソッドを使用して文字列パターンの Clob 値を検索する場合は、検索パターンを最大値である 4096 バイト以下にする必要があります。同様に、Blob.position メソッドを使用してバイト パターンの Blob 値を検索する場合は、検索パターンを最大値である 4096 バイト以下にする必要があります。
FILETOBLOB 機能で SERVER
キーワードとサーバ上の既存のファイルを使用してファイルを Blob に変換する場合、次のようなコマンドで実行すると適切に変換されます。
st.executeUpdate("INSERT INTO doc_list VALUES (7, FILETOBLOB('c:\\temp\\INSTSRV.EXE', 'SERVER'))");
FILETOBLOB
関数に CLIENT
キーワードを使用することはできません。これは、この関数がクライアント サイドからサーバ サイドへのデータ転送の処理について Informix クライアント ソフトウェアに依存しているためです。Informix 用の WebLogic JDBC ドライバには基底のクライアント ソフトウェアがないため、この種のデータ転送を処理する現行の実装はありません。
Informix ドライバは自動生成キーの値の取得をサポートします。Informix ドライバから返される自動生成キーは、SERIAL カラムまたは SERIAL8 カラムの値です。
Insert
文を使用する場合、Informix ドライバは次の形式の Statement.execute
メソッドおよび Statement.executeUpdate
メソッドをサポートします。これらのメソッドは、ドライバに自動生成キーの値を返すよう通知するためのものです。
Statement.execute (String sql, int autoGeneratedKeys)
Statement.executeUpdate (String sql, int autoGeneratedKeys)
Insert
文を使用する場合、Informix ドライバは次の形式の Connection.prepareStatement
メソッドをサポートします。このメソッドは、ドライバに自動生成キーの値を返すよう通知するためのものです。
Connection.prepareStatement (String sql, int autoGeneratedKeys)
アプリケーションは Statement.getGeneratedKeys()
メソッドを使用して、生成されたキーの値をドライバから取得します。
![]() ![]() |
![]() |
![]() |