![]() ![]() ![]() ![]() |
以下の節では、WebLogic Type 4 JDBC Informix ドライバのコンフィグレーション方法と使用方法について説明します。
Informix 用の WebLogic Type 4 JDBC ドライバ (「Informix ドライバ」) では、以下のデータベース バージョンがサポートされます。
WebLogic Type 4 JDBC Informix ドライバのドライバ クラスは次のとおりです。
XA : weblogic.jdbcx.informix.InformixDataSource
非 XA : weblogic.jdbc.informix.InformixDriver
WebLogic Server ドメインに JDBC データ ソースをコンフィグレーションする場合に、これらのドライバ クラスを使用します。
Informix データベースに接続するには、次の形式の URL を使用します。
jdbc:bea:informix://hostname
:port[;property=value[;...]]
hostname
は、接続するサーバの TCP/IP アドレスまたは TCP/IP ホスト名です。IP アドレスの使用については、「IP アドレスの使用」を参照してください。注意 : | 信頼性のないアプレットから、そのホスト以外のマシンへのソケットを開くことはできません。 |
port
は、TCP/IP ポートの番号です。 property=value
は、接続プロパティを指定します。接続プロパティの一覧および各プロパティに指定できる値については、「Informix 接続プロパティ」を参照してください。jdbc:bea:informix://server4:1526;informixServer=ol_test;
DatabaseName=ACCT01;User=test;Password=secret
表 4-1 に、Informix ドライバでサポートされる JDBC 接続プロパティを示し、各プロパティについて説明します。WebLogic Server ドメインの JDBC データ ソースのコンフィグレーションでこれらの接続プロパティを使用できます。プロパティを指定するには、JDBC データ ソースのコンフィグレーションで次の形式を使用します。
property=value
注意 : | すべての接続プロパティ名で大文字と小文字は区別されません。たとえば、Password は password と同じです。必須のプロパティかどうかが記載されています。各接続プロパティで示されているデータ型は、JDBC データ ソースのプロパティ値に使用される Java データ型です。 |
|
|
|
|
|
|
|
|
インデックスの追加、プロシージャのリコンパイルなど、データベース テーブルやプロシージャを変更する操作が発生した場合、これらにアクセスする既存の JDBC PreparedStatement はすべて、再使用する前に再準備の工程を経る必要があります。これは Informix データベース管理システムの制限です。WebLogic Server では、プールされた接続と同様に、アプリケーションの PreparedStatement もキャッシュ、保持、再使用されます。ただし、削除後に再作成されたり定義が変更されたりしたテーブルやプロシージャにアクセスするプリペアド ステートメントをアプリケーションで使用する場合は、キャッシュされたプリペアド ステートメントを再実行するといったん失敗します。実行できなくなったプリペアド ステートメントはその後キャッシュから削除され、アプリケーションでそのプリペアド ステートメントがもう一度要求されたときに置き換えられます。
WebLogic Server の実行時に DBMS 内のテーブルやプロシージャを変更したために PreparedStatement が失敗するのを防ぐには、[Statement キャッシュ サイズ] を 0 に設定します。これにより、リクエストのたびに新しい PreparedStatement が作成されるようになります。ただし、ステートメント キャッシュを無効にすると、ステートメント キャッシングによるパフォーマンスの向上は見込めなくなります。
Statement キャッシュ サイズの設定の詳細については、「ステートメント キャッシュによるパフォーマンスの向上」を参照してください。
以下に示す Informix ドライバの接続プロパティを設定すると、アプリケーションのパフォーマンスを向上させることができます。
フェッチ バッファのサイズを小さくするとメモリの消費量を抑えることができますが、ネットワーク上のデータのやり取りが多くなりパフォーマンスが低下します。フェッチ バッファのサイズを大きくすると、データベースからデータを返す際のネットワーク上のやり取りが少なくなってパフォーマンスが向上します。最適な値は、式 X = A * B * 50
を使用して計算できます。ここで、A は Select 文を実行するとアプリケーションから返される行の数、B は Select 文を実行すると返される一般的な行カラムの数です。
スクロールインセンシティブな結果セットを使用する場合のパフォーマンスを向上させるため、ドライバは結果セット データをディスクに書き込む代わりに、メモリにキャッシュできます。デフォルトでは、ドライバはインセンシティブな結果セット データを 2 MB までメモリにキャッシュし、残りの結果セット データをディスクに書き込みます。パフォーマンスを向上させるには、ドライバがデータをディスクに書き込む前に使用するメモリの量を増やすか、ドライバがインセンシティブな結果セット データをディスクに書き込めないようにします。最大キャッシュ サイズの設定は 2 GB です。
デフォルトでは、ResultSetMetaData.getTableName()
メソッドが呼び出された場合、Informix ドライバは、結果セット内の各カラムの正しいテーブル名を返すために必要な追加の処理を省略します。このため、getTableName()
メソッドは結果セット内のカラムごとに空の文字列を返す可能性があります。アプリケーションでテーブル名情報が必要ない場合は、この設定によって最適なパフォーマンスが得られます。
ResultSet メタデータを返す方法の詳細については、「ResultSet メタデータのサポート」を参照してください。
表 4-2 に、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 ドライバでは、ANSI SQL 92 エントリレベルの述語 (比較、BETWEEN、IN、LIKE、EXISTS などの述語構文) にパラメータを含んでいる Select 文に対してパラメータ メタデータを返すことができます。詳細な構文については、ANSI SQL リファレンスを参照してください。
以下のいずれかの条件に該当する場合は、Select 文に対してパラメータ メタデータを返すことができます。
以下の 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 = ?"
概数データ型として定義されたカラムのパラメータ メタデータが要求されると、ドライバからはスケールとして 255 が返されます。これは、そのカラムが概数データ型であり、スケールがないことを示します。たとえば、次のように col2 が概数データ型 (精度 20) のテーブルを作成したとします。
CREATE table fooTest(col1 int, col2 decimal(20))
ドライバからは、col2 のデータ型が精度 20、スケール 255 の 10 進数であることを示すパラメータ メタデータが返されます。
Informix ドライバでは、ストアド プロシージャの引数に対してパラメータ メタデータを返すことはできません。
アプリケーションでテーブル名情報が必要な場合、Informix ドライバは Select 文の ResultSet メタデータに含めてテーブル名情報を返すことができます。ResultSetMetaDataOptions
プロパティを 1 に設定した場合、ResultSetMetaData.getTableName()
メソッドが呼び出されたとき、Informix ドライバは結果セット内の各カラムの正しいテーブル名を決定する追加の処理を実行します。それ以外の場合、getTableName()
メソッドは結果セット内のカラムごとに空の文字列を返す可能性があります。
Informix ドライバが返すテーブル名情報は、結果セット内のカラムがデータベース テーブル内のカラムにマップされているかどうかによって異なります。結果セット内の各カラムがデータベース テーブル内のカラムにマップされている場合、Informix ドライバはそのカラムに関連付けられているテーブル名を返します。結果セット内の各カラムがテーブル内のカラムにマップされていない場合 (集約やリテラルなど)、Informix ドライバは空の文字列を返します。
ResultSet メタデータが返される Select 文には、エリアス、結合、および完全修飾名を含めることができます。以下のクエリは、ResultSetMetaData.getTableName()
メソッドによって Select リスト内の各カラムの正しいテーブル名が返される、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 実装をサポートします。
ドライバで RowSet を使用するには、J2SE 1.4 以上が必要です。
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 文を実行するときです。値を返す方法は、パラメータを含む Insert 文を使用しているかどうかによって異なります。
Insert
文を使用する場合、Informix ドライバは次の形式の Statement.execute()
メソッドおよび Statement.executeUpdate()
メソッドをサポートする。これらのメソッドは、ドライバに自動生成キーの値を返すよう指示するためのものです。Statement.execute(String
sql
, int
autoGeneratedKeys
)
Statement.execute(String
sql
, int[]
columnIndexes
)
Statement.execute(String
sql
, String[]
columnNames
)
Statement.executeUpdate(String
sql
, int
autoGeneratedKeys
)
Statement.executeUpdate(String
sql
, int[]
columnIndexes
)
Statement.executeUpdate(String
sql
, String[]
columnNames
)Insert
文を使用する場合、Informix ドライバは次の形式の Connection.prepareStatement()
メソッドをサポートする。このメソッドは、ドライバに自動生成キーの値を返すよう指示するためのものです。
自動生成キーの値は、Statement.getGeneratedKeys()
メソッドを使用して取得できます。このメソッドは、各自動生成キーのカラムとともに ResultSet オブジェクトを返します。
Database 接続プロパティは、DatabaseName 接続プロパティのシノニムとして使用できます。
接続 URL に Database と DatabaseName の両方の接続プロパティが指定されている場合は、接続 URL 内で後ろの方に指定されているプロパティが使用されます。たとえば、アプリケーションで次のような URL を指定した場合、DatabaseName 接続プロパティの値ではなく、Database 接続プロパティの値が使用されます。
jdbc:bea:informix://server1:2003;InformixServer=ol_test;
DatabaseName=jdbc;Database=acct;User=test;Password=secret
![]() ![]() ![]() |