ナビゲーションをスキップ

WebLogic Type 4 JDBC ドライバ ガイド

  前 次 前/次ボタンと目次ボタンとの区切り線 目次  

MS SQL Server ドライバ

以下の節では、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 ドライバを使用してください。

 


サポートされる 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 のドライバ クラスは次のとおりです。

XA : weblogic.jdbcx.sqlserver.SQLServerDataSource

非 XA : weblogic.jdbc.sqlserver.SQLServerDriver

 


URL

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 の最初のバックスラッシュ (\) はエスケープ文字です。

各要素の説明は次のとおりです。

server_name は、サーバの IP アドレスまたはホスト名です。

instance_name は、サーバ上の接続先インスタンスの名前です。

たとえば次の接続 URL を指定すると、server1 上の instance1 に接続されます。

jdbc:bea:sqlserver://server1\\instance1;User=test;Password=secret

 


SQL Server 接続プロパティ

表  4-1 では、SQL Server ドライバがサポートする JDBC 接続プロパティを示し、各プロパティについて説明します。 WebLogic Server ドメインの JDBC 接続プールのコンフィグレーションでこれらの接続プロパティを使用できます。 プロパティを指定するには、JDBC 接続プールのコンフィグレーションで次の形式を使用します。

property=value

注意 : すべての接続文字列プロパティ名で、大文字と小文字は区別されません。 たとえば、Password は password と同じです。

表 4-1 SQL Server の接続プロパティ

プロパティ

説明

AlwaysReportTriggerResults

省略可能

true または false。 データベース トリガ (データベースに格納されており、テーブルが修正されたときに実行または起動されるプロシージャ) によって生成された結果を、ドライバがどのように報告するかを指定する。

true に設定すると、ドライバはトリガによって生成された結果を含むすべての結果を返す。 この場合、複数のトリガ結果が同時に返される。 個別のトリガ結果を取得するには、Statement.getMoreResults メソッドを使用する。 発生した警告やエラーは結果内に報告される。

false に設定すると、文が単一の Insert 文、Update 文、または Delete 文の場合はトリガ結果が報告されない。 この場合、実行した文によって生成された更新件数のみが結果として返される (エラーが発生していない場合)。 トリガ結果は無視されるが、トリガによって生成されたエラーは報告される。 トリガによって生成された警告はキューに入れられる。 エラーが報告される場合は、更新件数は報告されない。

デフォルトは false。

CodePageOverride

省略可能

ドライバが文字データの変換に使用するコード ページを指定する。 指定したコード ページによって、デフォルトのデータベース コード ページがオーバーライドされる。 データベースとやり取り (取得および書き込み) するすべての文字データは、指定したコード ページを使用して変換される。 値としては、使用している Java 仮想マシンでサポートされている有効なコード ページの名前 (たとえば CodePageOverride=CP950) を含む文字列を指定する必要がある。

CodePageOverride プロパティと SendStringParametersAsUnicode プロパティの両方を true に設定した場合は、SendStringParametersAsUnicode プロパティが無視されて警告が生成される。 ドライバは、常に CodePageOverride プロパティに指定されたコード ページを使用してパラメータを送信する。

ConnectionRetryCount

省略可能

データベース サーバへの正常な接続を確立できるまでに、ドライバで接続を再試行する回数。 有効な値は、0 または正の整数。

0 に設定すると、リスト内のデータベース サーバへの試行が一巡して接続が確立できなかった場合でも接続は再試行されない。

デフォルトは 0。

ConnectionRetryDelay

省略可能

ConnectionRetryCount が正の整数に設定されている場合に、ドライバが再試行の前に待機する秒数。

デフォルトは 3。

DatabaseName

省略可能

接続先のデータベースの名前。

HostProcess

省略可能

Microsoft SQL Server に接続するアプリケーションのプロセス ID。 このプロパティの値は、データベース管理に有用な情報として master.dbo.sysprocesses テーブルの hostprocess カラムに表示される。

デフォルトは 0。

InsensitiveResultSetBufferSize

省略可能

-1、0、または x。 ドライバがインセンシティブな結果セット データのキャッシュに使用するメモリの量を指定する。 以下のいずれかの値を指定する必要がある。

-1 に設定すると、ドライバはすべてのインセンシティブな結果セット データをメモリにキャッシュする。 結果セットのサイズが利用できるメモリ容量を超えると、OutOfMemoryException 例外が生成される。 結果セット データをディスクに書き込む必要がないため、データがより効率的に処理される。

0 に設定すると、ドライバは 2GB を限度としてすべてのインセンシティブな結果セット データをメモリにキャッシュする。 結果セットのサイズが利用できるメモリ容量を超えると、結果セットがディスクにページングされる。 結果セット データがディスクに書き込まれる可能性があるため、ディスクに正しく書き込むためにデータの再フォーマットが必要になることがある。

x (正の整数) に設定すると、インセンシティブな結果セット データのキャッシュに使用するメモリ バッファのサイズ (KB 単位) を指定したことになり、ドライバはすべての結果セット データをメモリにキャッシュする。 結果セットのサイズがバッファ サイズを超えると、結果セットがディスクにページングされる。 結果セット データがディスクに書き込まれる可能性があるため、ディスクに正しく書き込むためにデータの再フォーマットが必要になることがある。 バッファ サイズとして 2 の累乗を指定すると、メモリの使用がより効率的になる。

デフォルトは 2048 (KB)。

NetAddress

省略可能

Microsoft SQL Server に接続するアプリケーションのネットワーク インタフェース カードのメディア アクセス制御 (MAC) アドレス。 このプロパティの値は、データベース管理に有用な情報として master.dbo.sysprocesses テーブルの net_address カラムに表示される。

デフォルトは 000000000000。

Password

Microsoft SQL Server データベースに接続する場合に使用するパスワード。大文字と小文字は区別されない。

PortNumber

省略可能

Microsoft SQL Server データベースへの接続をリスンするプライマリ データベース サーバの TCP ポート。

デフォルトは 1433。

ProgramName

省略可能

Microsoft SQL Server に接続するアプリケーションの名前。 このプロパティの値は、データベース管理に有用な情報として master.dbo.sysprocesses テーブルの program_name カラムに表示される。

デフォルトは空文字列。

SelectMethod

省略可能

direct または cursor。 SQL Server ドライバが、Select 文でデータベース カーソルを要求するかどうかを判定するためのヒント。 ドライバが要求されたメソッドを常に満たせるとは限らないので、ドライバのパフォーマンスと動作は、ヒントとして定義されるこのプロパティによって影響を受ける。

  • Direct - ドライバが Direct メソッドを使用すると、データベース サーバはクエリに応答するときに、ドライバへの 1 つの応答ですべての結果セットを送信する。 サーバサイドのデータベース カーソルは作成されない。 通常、応答はドライバによってキャッシュされない。 このメソッドでは、ドライバはクエリの応答をすべて処理してからでないと、次のクエリを送信できない。 同じ接続で別の文を使うなどしてクエリがもう 1 つ送信された場合、ドライバは 2 番目のクエリを送信する前に最初のクエリの応答をキャッシュする。 通常、Cursor メソッドよりも Direct メソッドのほうがパフォーマンスが良い。

  • Cursor - ドライバが Cursor メソッドを使用すると、サーバサイドのカーソルが要求される。 この行は、転送専用の結果セットを返すときにサーバからブロック単位で取得する。 JDBC Statement メソッドの setFetchSize を使用すると、各リクエストで取得する行数を制御できる。 パフォーマンス テストの結果から、Cursor メソッドを使用した場合、setFetchSize の値がパフォーマンスに大きく影響することがわかっている。 setFetchSize の値を決定するための簡単なルールはない。 setFetchSize の値を変えて実験して、アプリケーションのパフォーマンスが最高になる値を特定することが望ましい。 Cursor メソッドは、大量のデータが得られるクエリ、特に複数の結果セットを開く場合に効果的である。

デフォルトは Direct。

SendStringParametersAsUnicode

省略可能

true または false。 Microsoft SQL Server データベースに送信される文字列パラメータを Unicode で送信するか、データベースのデフォルト文字エンコーディングで送信するかを指定する。

true に設定した場合、文字列パラメータは Microsoft SQL Server に Unicode で送信される。

false に設定した場合、文字列パラメータはデフォルト エンコーディングで送信される。この場合、サーバは Unicode 文字をデフォルト エンコーディングに変換せずに済むためパフォーマンスが向上する。 ただし、デフォルト エンコーディングを使用するのは、指定したパラメータ文字列データが、データベースのデフォルト エンコーディングと同じである場合に限定する必要がある。

デフォルトは true。

CodePageOverride プロパティに値が設定されている場合にこのプロパティを true に設定すると、このプロパティが無視されて警告が生成される。

ServerName

プライマリ データベース サーバの IP アドレスまたはサーバ名 (ネットワークが名前付きのサーバをサポートしている場合) を指定する。 たとえば、122.23.15.12 または SQLServerServer のように指定する。

名前付きのインスタンスに接続するには、このプロパティで server_name\instance_name を指定する。server_name は指定したサーバ上の接続先インスタンスの IP アドレスで、instance_name はインスタンスの名前。

User

Microsoft SQL Server データベースに接続する場合に使用するユーザ名。大文字と小文字は区別されない。

UseServerSideUpdatableCursors

true または false。 更新可能な結果セットが要求されたときに、ドライバがサーバサイドのカーソルを使用するかどうかを指定する。

true に設定すると、更新可能な結果セットが要求されたときにサーバサイドで更新可能なカーソルが作成される。

false に設定すると、デフォルトの更新可能結果セット機能が使用される。

デフォルトは false。

サーバサイドで更新可能なカーソルの使用方法については、「サーバサイドで更新可能なカーソル」を参照。

WSID

省略可能

ワークステーション ID。通常は、アプリケーションがあるコンピュータのネットワーク名。 このプロパティを指定すると、この値が master.dbo.sysprocesses テーブルの hostname カラムに格納され、sp_who および Transact-SQL HOST_NAME 関数によって返される。 この値は、データベース管理において有用な情報となる。

デフォルトは空文字列。

XATransactionGroup

省略可能

接続によって開始された各トランザクションを特定するためのトランザクション グループ ID。 この ID は、分散トランザクションのクリーンアップに使用できる。


 


 

 


サンプル接続プール コンフィグレーション

表 4-2 に、非 XA バージョンの WebLogic Type 4 MS SQL Server JDBC ドライバを使用する WebLogic Server 接続プールのサンプルのコンフィグレーション属性を示します。表 4-3 に、XA バージョンのドライバを使用する WebLogic Server 接続プールのサンプルのコンフィグレーション属性を示します。

表 4-2 非 XA WebLogic Type 4 MS SQL Server JDBC ドライバ使用時の接続プールの属性

属性

[URL] (URL)

jdbc:bea:sqlserver://dbserver1:1433

[ドライバ クラス名] (DriverName)

weblogic.jdbc.sqlserver.SQLServerDriver

[プロパティ] (Properties)

user=username
DatabaseName=dbname

[パスワード] (Password)

password

[対象] (Target)

serverName


 

表 4-3 XA WebLogic Type 4 MS SQL Server JDBC ドライバ使用時の接続プールの属性

属性

[URL] (URL)

jdbc:bea:sqlserver://dbserver1:1433

[ドライバ クラス名] (DriverName)

weblogic.jdbcx.sqlserver.SQLServerDataSource

[プロパティ] (Properties)

user=username
DatabaseName=dbname
selectMethod=cursor

[ローカル トランザクションのサポート] (SupportsLocalTransaction)

true

[トランザクション完了まで XA 接続を保持] (KeepXAConnTillTxComplete)

true

[パスワード] (Password)

password

[対象] (Target)

serverName

 


パフォーマンスに関する考慮事項

以下のリストで説明するように SQL Server ドライバに次の接続プロパティを設定すると、アプリケーションのパフォーマンスを向上させることができます。

InsensitiveResultSetBufferSize

スクロールインセンシティブな結果セットを扱う際のパフォーマンスを向上させるため、ドライバでは、結果セット データをディスクに書き込む代わりにメモリにキャッシュすることができます。 デフォルトでは、インセンシティブな結果セット データのうち 2MB がメモリにキャッシュされ、その残りがディスクに書き込まれます。 ドライバがデータをディスクに書き込む前に使用するメモリの量を増やすか、ドライバがインセンシティブな結果セット データをディスクに書き込まないように設定すると、パフォーマンスが向上します。 最大キャッシュ サイズは 2GB です。

MaxPooledStatements

ドライバがアプリケーション サーバ内部から実行されるのでない場合、または独自の Prepared Statement のプールを提供しない別のアプリケーション内部から実行されるのでない場合は、パフォーマンスを向上させるため、ドライバ独自の内部 Prepared Statement のプールを有効にする必要があります。 ドライバの内部 Prepared Statement のプールを有効にすると、ドライバは、アプリケーションによって作成された特定数の Prepared Statement をキャッシュします。 たとえば、MaxPooledStatements プロパティを 20 に設定した場合、ドライバは、アプリケーションによって作成された最後の 20 個の Prepared Statement をキャッシュします。 このプロパティに設定された値が、アプリケーションが使用する Prepared Statement の数よりも大きい場合、すべての Prepared Statement がキャッシュされます。

ResultSetMetaDataOptions

SQL Server ドライバは、デフォルトでは、ResultSetMetaData.getTableName() メソッドが呼び出されたとき、結果セットで各カラムの正しいテーブル名を返すために必要となる追加処理を省略します。 そのため getTableName() メソッドは、結果セットで各カラムについて空の文字列を返す場合があります。 アプリケーションがテーブル名情報を必要としないことがわかっている場合は、デフォルト設定で最大限のパフォーマンスが得られます。

ResultSet メタデータを返す方法の詳細については、「ResultSet メタデータのサポート」を参照してください。

SelectMethod

ほとんどの場合、サーバサイドのデータベース カーソルを使用するとパフォーマンスが低下します。 ただし、次の条件に該当する場合は、このプロパティを cursor に設定する (サーバサイドのデータベース カーソルを使用する) ことをお勧めします。

SendStringParametersAsUnicode

アプリケーションがアクセスするすべてのデータが、デフォルトのデータベース文字エンコーディングを使用してデータベースに格納されている場合は、SendStringParametersAsUnicode を false に設定するとパフォーマンスが向上します。

UseServerSideUpdatableCursors

ほとんどの場合、サーバサイドで更新可能なカーソルを使用するとパフォーマンスが向上します。 ただし、このタイプのカーソルは、インセンシティブな結果セットや、主キーを含むデータベース テーブルから生成されたのではないセンシティブな結果セットでは使用できません。

サーバサイドで更新可能なカーソルの使用方法については、「サーバサイドで更新可能なカーソル」を参照してください。

 


データ型

表 4-4 に、SQL Server ドライバがサポートしている SQL Server 7 および SQL Server 2000 のデータ型と、対応する JDBC データ型を示します。

表 4-4 SQL Server 7 と SQL Server 2000 がサポートするデータ型

SQL Server のデータ型

JDBC のデータ型

binary

BINARY

bit

BIT

char

CHAR

datetime

TIMESTAMP

decimal

DECIMAL

decimal() identity

DECIMAL

float

FLOAT

image

LONGVARBINARY

int

INTEGER

int identity

INTEGER

money

DECIMAL

nchar

CHAR

ntext

LONGVARCHAR

numeric

NUMERIC

numeric() identity

NUMERIC

nvarchar

VARCHAR

real

REAL

smalldatetime

TIMESTAMP

smallint

SMALLINT

smallint identity

SMALLINT

smallmoney

DECIMAL

sysname

VARCHAR

text

LONGVARCHAR

timestamp

BINARY

tinyint

TINYINT

tinyint identity

TINYINT

uniqueidentifier

CHAR

varbinary

VARBINARY

varchar

VARCHAR


 

表 4-5 に、SQL Server 2000 のみでサポートされているその他のデータ型を示します。

表 4-5 SQL Server 2000 がサポートするその他のデータ型

SQL Server のデータ型

JDBC のデータ型

bigint

BIGINT

bigint identity

BIGINT

sql_variant

VARCHAR


 

データ型の詳細については、「GetTypeInfo」を参照してください。

 


SQL エスケープ シーケンス

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 用ストアド プロシージャのインストール

JTA で JDBC 分散トランザクションを使用するには、システム管理者が次の手順に従って、Microsoft SQL Server JDBC XA プロシージャをインストールする必要があります。 この手順は、分散トランザクションに関与する MS SQL Server ごとに繰り返す必要があります。

注意 : インストールされている Microsoft SQL Server DBMS にパッチをインストールする場合、次の手順に従って JTA 用のストアド プロシージャを再インストールする必要があります。 また、WebLogic Server のサービス パックの中には、ドライバのアップデートが含まれているものがあり、JTA 用ストアド プロシージャの再インストールが必要になる場合があります (後述の説明を参照)。

JTA 用のストアド プロシージャをインストールするには

  1. WL_HOME\server\lib ディレクトリにある sqljdbc.dll および instjdbc.sql ファイルを、MS SQL Server データベース サーバの SQL_Server_Root/bin ディレクトリにコピーします。WL_HOME は WebLogic Server がインストールされているディレクトリで、通常は c:\bea\weblogic81 です。
  2. 注意 : 複数の Microsoft SQL Server インスタンスがあるデータベース サーバにストアド プロシージャをインストールする場合、実行中の各 SQL サーバ インスタンスが sqljdbc.dll ファイルを見つけられなければなりません。 そのため、sqljdbc.dll ファイルはグローバル パスまたはアプリケーション固有のパス上に格納されている必要があります。 アプリケーション固有のパスの場合は、各インスタンスの <drive>:\Program Files\Microsoft SQL Server\MSSQL$<Instance 1 Name>\Binn ディレクトリに sqljdbc.dll ファイルを配置します。

  3. データベース サーバから、ISQL ユーティリティを使用して instjdbc.sql スクリプトを実行します。 システム管理者は、instjdbc.sql を実行する前に、マスター データベースをバックアップする必要があります。 コマンド プロンプトで、次の構文に従って instjdbc.sql を実行します。
  4. 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 プロシージャを格納したり、既存のプロシージャの変更をログに記録したりするための容量がマスター データベースで不足していると、スクリプトは失敗します。

 


Large Object (LOB) のサポート

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 ドライバは、この節で説明するようにパラメータ メタデータを返すことができます。

Insert 文および Update 文

SQL Server ドライバは、以下の形式の Insert 文および Update 文のパラメータ メタデータを返すことができます。

operator は、SQL 演算子 (=、<、>、<=、>=、および <>) です。

Select 文

SQL Server ドライバは、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 = ?"

 


ResultSet メタデータのサポート

アプリケーションでテーブル名情報が必要な場合、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() の各メソッドが呼び出された場合にのみ実行されます。

 


RowSet のサポート

SQL Server ドライバでは、次のような RowSet インタフェースの JSR 114 実装をサポートしています。

JSR 114 の詳細については、http://www.jcp.org/en/jsr/detail?id=114 を参照してください。

 


自動生成キーのサポート

SQL Server ドライバは自動生成キーの値の取得をサポートします。 SQL Server ドライバから返される自動生成キーは、identity カラムの値です。

値を返す方法は、パラメータを含む Insert 文を使用しているかどうかによって異なります。

アプリケーションは Statement.getGeneratedKeys メソッドを使用して、生成されたキーの値をドライバから取得します。

 

フッタのナビゲーションのスキップ  ページの先頭 前 次