WebLogic Type 4 JDBC ドライバ ガイド
![]() |
![]() |
![]() |
![]() |
以下の節では、BEA WebLogic Type 4 JDBC SQL Server ドライバのコンフィグレーション方法と使用方法について説明します。
注意 : BEA WebLogic Type 4 JDBC MS SQL Server ドライバ (この章の主題) は、非推奨となった WebLogic jDriver for Microsoft SQL Server に置き換わるものです。 新しいドライバは JDBC 3.0 に準拠しており、JDBC 2.0 拡張機能の一部をサポートし、パフォーマンスが向上しています。 WebLogic jDriver for Microsoft SQL Server の代わりに、新しい BEA WebLogic Type 4 JDBC MS SQL Server ドライバを使用してください。
BEA WebLogic Type 4 JDBC MS SQL Server ドライバ (「SQL Server ドライバ」) は、以下のバージョンのデータベース管理システムをサポートします。
JTA を介して JDBC 分散トランザクションを使用するには、SQL Server のストアド プロシージャをインストールする必要があります。 詳細については、「JTA 用ストアド プロシージャのインストール」を参照してください。
BEA WebLogic Type 4 JDBC MS SQL Server のドライバ クラスは次のとおりです。
Microsoft SQL Server データベースに接続するには、次の形式の URL を使用します。
jdbc:bea:sqlserver://
dbserver
:
port
Microsoft SQL Server では、SQL Server データベースの複数のインスタンスを同じサーバで同時に実行することができます。 各インスタンスはインスタンス名で識別されます。
接続 URL を使用して名前付きのインスタンスに接続するには、次の形式で URL を指定します。
jdbc:bea:sqlserver://server_name\\instance_name
注意 : \\
instance_name
の最初のバックスラッシュ (\
) はエスケープ文字です。
たとえば次の接続 URL を指定すると、server1 上の instance1 に接続されます。
jdbc:bea:sqlserver://server1\\instance1;User=test;Password=secret
表 4-1 では、SQL Server ドライバがサポートする JDBC 接続プロパティを示し、各プロパティについて説明します。 WebLogic Server ドメインの JDBC 接続プールのコンフィグレーションでこれらの接続プロパティを使用できます。 プロパティを指定するには、JDBC 接続プールのコンフィグレーションで次の形式を使用します。
property=value
注意 : すべての接続文字列プロパティ名で、大文字と小文字は区別されません。 たとえば、Password は password と同じです。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
表 4-2 に、非 XA バージョンの WebLogic Type 4 MS SQL Server JDBC ドライバを使用する WebLogic Server 接続プールのサンプルのコンフィグレーション属性を示します。表 4-3 に、XA バージョンのドライバを使用する WebLogic Server 接続プールのサンプルのコンフィグレーション属性を示します。
以下のリストで説明するように SQL Server ドライバに次の接続プロパティを設定すると、アプリケーションのパフォーマンスを向上させることができます。
スクロールインセンシティブな結果セットを扱う際のパフォーマンスを向上させるため、ドライバでは、結果セット データをディスクに書き込む代わりにメモリにキャッシュすることができます。 デフォルトでは、インセンシティブな結果セット データのうち 2MB がメモリにキャッシュされ、その残りがディスクに書き込まれます。 ドライバがデータをディスクに書き込む前に使用するメモリの量を増やすか、ドライバがインセンシティブな結果セット データをディスクに書き込まないように設定すると、パフォーマンスが向上します。 最大キャッシュ サイズは 2GB です。
ドライバがアプリケーション サーバ内部から実行されるのでない場合、または独自の Prepared Statement のプールを提供しない別のアプリケーション内部から実行されるのでない場合は、パフォーマンスを向上させるため、ドライバ独自の内部 Prepared Statement のプールを有効にする必要があります。 ドライバの内部 Prepared Statement のプールを有効にすると、ドライバは、アプリケーションによって作成された特定数の Prepared Statement をキャッシュします。 たとえば、MaxPooledStatements
プロパティを 20 に設定した場合、ドライバは、アプリケーションによって作成された最後の 20 個の Prepared Statement をキャッシュします。 このプロパティに設定された値が、アプリケーションが使用する Prepared Statement の数よりも大きい場合、すべての Prepared Statement がキャッシュされます。
SQL Server ドライバは、デフォルトでは、ResultSetMetaData.getTableName()
メソッドが呼び出されたとき、結果セットで各カラムの正しいテーブル名を返すために必要となる追加処理を省略します。 そのため getTableName()
メソッドは、結果セットで各カラムについて空の文字列を返す場合があります。 アプリケーションがテーブル名情報を必要としないことがわかっている場合は、デフォルト設定で最大限のパフォーマンスが得られます。
ResultSet メタデータを返す方法の詳細については、「ResultSet メタデータのサポート」を参照してください。
ほとんどの場合、サーバサイドのデータベース カーソルを使用するとパフォーマンスが低下します。 ただし、次の条件に該当する場合は、このプロパティを cursor に設定する (サーバサイドのデータベース カーソルを使用する) ことをお勧めします。
アプリケーションがアクセスするすべてのデータが、デフォルトのデータベース文字エンコーディングを使用してデータベースに格納されている場合は、SendStringParametersAsUnicode
を false に設定するとパフォーマンスが向上します。
ほとんどの場合、サーバサイドで更新可能なカーソルを使用するとパフォーマンスが向上します。 ただし、このタイプのカーソルは、インセンシティブな結果セットや、主キーを含むデータベース テーブルから生成されたのではないセンシティブな結果セットでは使用できません。
サーバサイドで更新可能なカーソルの使用方法については、「サーバサイドで更新可能なカーソル」を参照してください。
表 4-4 に、SQL Server ドライバがサポートしている SQL Server 7 および SQL Server 2000 のデータ型と、対応する JDBC データ型を示します。
表 4-5 に、SQL Server 2000 のみでサポートされているその他のデータ型を示します。
データ型の詳細については、「GetTypeInfo」を参照してください。
SQL Server ドライバでサポートされている SQL エスケープ シーケンスの詳細については、「JDBC の SQL エスケープ シーケンス」を参照してください。
SQL Server ドライバは、トランザクション アイソレーション レベルとして Read Committed、Read Uncommitted、Repeatable Read、および Serializable をサポートしています。 デフォルトは Read Committed です。
SQL Server ドライバは、スクロールセンシティブな結果セット、スクロールインセンシティブな結果セット、および更新可能な結果セットをサポートしています。
注意 : SQL Server ドライバが、要求された結果セットのタイプまたは同時実行性をサポートできない場合は、カーソルを自動的にダウングレードして詳細情報の入った SQLWarning を生成します。
SQL Server ドライバでは、クライアントサイドのカーソルまたはサーバサイドのカーソルを使用して、更新可能な結果セットをサポートすることができます。 SQL Server ドライバは、結果セットのタイプを問わずに使用できるという理由から、デフォルトではクライアントサイドのカーソルを使用します。 多くの場合、サーバサイドのカーソルを使用するとパフォーマンスが向上しますが、サーバサイドのカーソルは、スクロールインセンシティブな結果セットや、主キーを含むデータベース テーブルから生成されたのではないスクロールセンシティブな結果セットでは使用できません。 サーバサイドのカーソルを使用するには、UseServerSideUpdatableCursors
プロパティを true に設定します。
UseServerSideUpdatableCursors
プロパティを true に設定している場合に、スクロールインセンシティブで更新可能な結果セットが要求されると、ドライバはそのリクエストをスクロールインセンシティブで読み込み専用の結果セットにダウングレードします。 同様に、スクロールセンシティブで更新可能な結果セットが要求され、その結果セットの生成元であるテーブルに主キーが含まれていない場合、ドライバはそのリクエストをスクロールセンシティブで読み込み専用の結果セットにダウングレードします。 どちらの場合も警告が生成されます。
サーバサイドで更新可能なカーソルを、主キーを含むデータベース テーブルから生成されたセンシティブな結果セットで使用する場合、結果セットに対して行う変更は参照可能になります。 ドライバのデフォルトの動作 (UseServerSideUpdatableCursors=false
) を使用すると、変更は参照可能になりません。
JTA で JDBC 分散トランザクションを使用するには、システム管理者が次の手順に従って、Microsoft SQL Server JDBC XA プロシージャをインストールする必要があります。 この手順は、分散トランザクションに関与する MS SQL Server ごとに繰り返す必要があります。
注意 : インストールされている Microsoft SQL Server DBMS にパッチをインストールする場合、次の手順に従って JTA 用のストアド プロシージャを再インストールする必要があります。 また、WebLogic Server のサービス パックの中には、ドライバのアップデートが含まれているものがあり、JTA 用ストアド プロシージャの再インストールが必要になる場合があります (後述の説明を参照)。
WL_HOME
\server\lib
ディレクトリにある sqljdbc.dll
および instjdbc.sql
ファイルを、MS SQL Server データベース サーバの SQL_Server_Root
/bin
ディレクトリにコピーします。WL_HOME
は WebLogic Server がインストールされているディレクトリで、通常は c:\bea\weblogic81
です。注意 : 複数の Microsoft SQL Server インスタンスがあるデータベース サーバにストアド プロシージャをインストールする場合、実行中の各 SQL サーバ インスタンスが sqljdbc.dll
ファイルを見つけられなければなりません。 そのため、sqljdbc.dll
ファイルはグローバル パスまたはアプリケーション固有のパス上に格納されている必要があります。 アプリケーション固有のパスの場合は、各インスタンスの <drive>:\Program Files\Microsoft SQL Server\MSSQL$<Instance 1 Name>\Binn
ディレクトリに sqljdbc.dll
ファイルを配置します。
instjdbc.sql
スクリプトを実行します。 システム管理者は、instjdbc.sql
を実行する前に、マスター データベースをバックアップする必要があります。 コマンド プロンプトで、次の構文に従って instjdbc.sql
を実行します。
ISQL -Usa -Psa_password -Sserver_name -ilocation\instjdbc.sql
sa_password は、システム管理者のパスワードです。
server_name は、SQL Server のあるサーバ名です。
location は、instjdbc.sql
の絶対パスです (このスクリプトは、手順 1 で SQL_Server_Root
/bin
ディレクトリにコピーしたものです)。
instjdbc.sql
スクリプトを実行すると、多数のメッセージが表示されます。 通常、これらのメッセージは無視できますが、実行エラーを示すメッセージがないかどうか確認してください。 最後のメッセージは、instjdbc.sql
が正常に実行されたことを示すはずです。 JDBC XA プロシージャを格納したり、既存のプロシージャの変更をログに記録したりするための容量がマスター データベースで不足していると、スクリプトは失敗します。
Microsoft SQL Server では Blob または Clob データ型は定義されていませんが、SQL Server ドライバによって、Blob および Clob 用に設計された JDBC メソッドを使用して長いデータ (特に LONGVARBINARY データおよび LONGVARCHAR データ) を取得および更新できます。 これらのメソッドを使用して長いデータを Blob または Clob として更新すると、更新は Blob または Clob オブジェクト内のデータのローカル コピーに対して行われます。
Blob および Clob 用の JDBC メソッドを使用して長いデータを取得および更新すると、Blob および Clob を操作した場合と同じメリットが得られます。 たとえば Blob および Clob を使用した場合、
Blob および Clob を使用した場合のこうしたメリットを得るには、データをキャッシュする必要があります。 データをキャッシュするので、特に一度にデータの逐次読み出しを行う場合に、パフォーマンスが低下します。 長いデータのサイズが使用可能なメモリよりも大きいと、パフォーマンスが著しく低下することがあります。
バッチ挿入およびバッチ更新用の SQL Server ドライバ実装は JDBC 3.0 に準拠しています。 SQL Server ドライバは、バッチ挿入またはバッチ更新で文またはパラメータ セットのエラーを検出すると、BatchUpdateException を生成し、残りの文またはパラメータ セットのバッチ処理を続行します。 BatchUpdateException 内の更新カウントの配列には、文またはパラメータごとに 1 つのエントリが含まれます。 失敗した文またはパラメータ セットのエントリには、Statement.EXECUTE_FAILED 値が含まれます。
SQL Server ドライバは、この節で説明するようにパラメータ メタデータを返すことができます。
SQL Server ドライバは、以下の形式の Insert 文および Update 文のパラメータ メタデータを返すことができます。
INSERT INTO foo VALUES (?, ?, ?)
INSERT INTO foo (col1, col2, col3) VALUES (?, ?, ?)
UPDATE foo SET col1=?, col2=?, col3=? WHERE col1 operator ? [{AND | OR} col2 operator ?]
operator
は、SQL 演算子 (=、<、>、<=、>=、および <>) です。
SQL Server ドライバは、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 = ?"
アプリケーションでテーブル名情報が必要な場合、SQL Server ドライバでは、Select 文の ResultSet メタデータでテーブル名情報を返すことができます。 ResultSetMetaDataOptions
プロパティを 1 に設定すると、SQL Server ドライバは、ResultSetMetaData.getTableName()
メソッドが呼び出されたとき、結果セットで各カラムの正しいテーブル名を返すための追加処理を実行します。 このように設定しない場合、getTableName()
メソッドは、結果セットで各カラムについて空の文字列を返す場合があります。
ResultSetMetaDataOptions
プロパティを 1 に設定した場合、ResultSetMetaData.getTableName()
メソッドの呼び出し時に SQL Server ドライバが返すテーブル名情報は、結果セットのカラムがデータベース内のテーブルのカラムにマップされているかどうかによって異なります。 SQL Server ドライバは、データベース内のテーブルのカラムにマップされている結果セットのカラムについては、そのカラムに関連付けられているテーブル名を返します。 データベース内のテーブルのカラムにマップされていない結果セットのカラム (集約関数やリテラルなど) については、空の文字列を返します。
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
SQL Server ドライバでは、ResultSetMetaData.getSchemaName()
メソッドまたは ResultSetMetaData.getCatalogName()
メソッドが呼び出されたときに、スキーマ名情報またはカタログ名情報を返すこともできます (ドライバがこれらの情報を特定できる場合)。 たとえば次の文の場合、SQL Server ドライバはカタログ名として「test」、スキーマ名として「test1」、テーブル名として「foo」を返します。
SELECT * FROM test.test1.foo
テーブル名、スキーマ名、およびカタログ名の情報を返すために必要となる追加処理は、ResultSetMetaData.getTableName()
、ResultSetMetaData.getSchemaName()
、または ResultSetMetaData.getCatalogName()
の各メソッドが呼び出された場合にのみ実行されます。
SQL Server ドライバでは、次のような RowSet インタフェースの JSR 114 実装をサポートしています。
JSR 114 の詳細については、http://www.jcp.org/en/jsr/detail?id=114 を参照してください。
SQL Server ドライバは自動生成キーの値の取得をサポートします。 SQL Server ドライバから返される自動生成キーは、identity カラムの値です。
値を返す方法は、パラメータを含む Insert 文を使用しているかどうかによって異なります。
Statement.execute
および Statement.executeUpdate
メソッドをサポートします。これらのメソッドは、ドライバに自動生成キーの値を返すよう通知するためのものです。 Statement.execute (String sql, int autoGeneratedKeys)
Statement.executeUpdate (String sql, int autoGeneratedKeys)
Connection.prepareStatement
メソッドをサポートします。このメソッドは、ドライバに自動生成キーの値を返すよう通知するためのものです。アプリケーションは Statement.getGeneratedKeys
メソッドを使用して、生成されたキーの値をドライバから取得します。
![]() ![]() |
![]() |
![]() |