WebLogic Type 4 JDBC ドライバ ガイド

     前  次    新しいウィンドウで目次を開く   
ここから内容の開始

MS SQL Server ドライバ

以下の節では、WebLogic Type 4 JDBC SQL Server ドライバのコンフィグレーション方法と使用方法について説明します。

注意 : 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 の代わりに、新しい WebLogic Type 4 JDBC MS SQL Server ドライバを使用してください。

 


サポートされる SQL Server データベースのバージョン

WebLogic Type 4 JDBC MS SQL Server ドライバ (「SQL Server ドライバ」) は、以下のバージョンのデータベース管理システムをサポートします。

JTA を介して JDBC 分散トランザクションを使用するには、Microsoft SQL Server のストアド プロシージャをインストールする必要があります。詳細については、「JTA 用ストアド プロシージャのインストール」を参照してください。

 


ドライバ クラス

WebLogic Type 4 JDBC MS SQL Server のドライバ クラスは次のとおりです。

   XA : weblogic.jdbcx.sqlserver.SQLServerDataSource
   非 XA : weblogic.jdbc.sqlserver.SQLServerDriver

 


Microsoft SQL Server の URL

Microsoft SQL Server データベースに接続するには、次の形式の URL を使用します。

jdbc:bea:sqlserver://hostname:port[;property=value[;...]]

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

次に例を示す。

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

名前付きインスタンスに接続する手順については、「名前付きインスタンスへの接続」を参照してください。

 


名前付きインスタンスへの接続

Microsoft SQL Server および Microsoft SQL Server 2005 では、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;Pasword=secret

 


SQL Server 接続プロパティ

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

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

表 5-1 SQL Server の接続プロパティ
プロパティ
説明
AlwaysReportTriggerResults
省略可能
true または false。データベース トリガ (データベースに格納されており、テーブルが修正されたときに実行または起動されるプロシージャ) によって生成された結果を、ドライバがどのように報告するかを指定する。Microsoft SQL Server 2005 では、データ定義言語 (DDL) イベントによって起動されたトリガが含まれる。
true に設定すると、ドライバはトリガによって生成された結果を含むすべての結果を返す。この場合、複数のトリガ結果が同時に返される。個別のトリガ結果を取得するには、Statement.getMoreResults() メソッドを使用する。発生した警告やエラーは結果内に報告される。
false (デフォルト) に設定した場合 :
  • Microsoft SQL Server 2005 では、単一の INSERT、UPDATE、DELETE、CREATE、ALTER、DROP、GRANT、REVOKE、または DENY 文の場合、ドライバはトリガ結果を報告しない。
  • 他の Microsoft SQL Server データベースでは、単一の INSERT、UPDATE、または DELETE 文の場合、ドライバはトリガ結果を報告しない。
この場合、実行した文によって生成された更新件数のみが結果として返される (エラーが発生していない場合)。トリガ結果は無視されるが、トリガによって生成されたエラーは報告される。トリガによって生成された警告はキューに入れられる。エラーが報告される場合は、更新件数は報告されない。
デフォルトは false。
AuthenticationMethod
auto、kerberos、ntlm、または userIdPassword。ドライバが接続を確立する際に使用する認証方法を指定する。
auto (デフォルト) に設定すると、ドライバは接続を確立する際に SQL Server 認証、Kerberos 認証、または NTLM 認証を使用する。アプリケーションがユーザ ID を提供しているか、ドライバが Windows プラットフォームで実行されているか、ドライバが NTLM 認証に必要な DLL をロードできるかどうかなどの条件の組み合わせに基づいて、認証方法が選択される。このデフォルト値の使用の詳細については、「AuthenticationMethod プロパティの使用」を参照。
kerberos に設定すると、Kerberos 認証が使用される。ユーザ ID やパスワードを指定しても無視される。この値は Microsoft SQL Server 2000 以降に接続する場合にのみサポートされる。
ntlm に設定すると、NTLM 認証に必要な DLL をロードできる場合は NTLM 認証が使用される。DLL をロードできない場合は、ドライバから例外が送出される。ユーザ ID やパスワードを指定しても無視される。
userIdPassword に設定すると、接続を確立する際に SQL Server 認証が使用される。ユーザ ID が指定されていない場合は、ドライバから例外が送出される。
User プロパティはユーザ ID を提供します。Password プロパティはパスワードを提供します。
注意 : type4、type2、および none の値は非推奨となったが、下位互換性のために認識される。代わりに kerberos、ntlm、および userIdPassword の使用を推奨。
SQL Server ドライバによる認証の使用方法については、「認証」を参照。
CodePageOverride
省略可能
ドライバが文字データの変換に使用するコード ページを指定する。指定したコード ページによって、デフォルトのデータベース コード ページがオーバーライドされる。データベースとやり取り (取得および書き込み) するすべての文字データは、指定したコード ページを使用して変換される。値としては、使用している JVM でサポートされている有効なコード ページの名前 (たとえば CodePageOverride=CP950) を含む文字列を指定する必要がある。
デフォルトでは、文字データの変換に使用するコード ページが自動的に識別される。このプロパティは、ドライバのデフォルト動作を変更する必要がある場合にのみ使用する。
CodePageOverride プロパティと SendStringParametersAsUnicode プロパティの両方を true に設定した場合は、SendStringParametersAsUnicode プロパティが無視されて警告が生成される。ドライバは、常に CodePageOverride プロパティに指定されたコード ページを使用してパラメータを送信する。
ConnectionRetryCount
省略可能
データベース サーバへの正常な接続を確立できるまでに、ドライバで接続を再試行する回数。有効な値は、0 または正の整数。
0 に設定すると、最初の試行が失敗した場合でも再接続は試行されない。
試行の待機間隔は、ConnectionRetryDelay プロパティで秒単位で指定する。
デフォルトは 5。
ConnectionRetryDelay
省略可能
ConnectionRetryCount が正の整数に設定されている場合に、ドライバが接続の再試行の前に待機する秒数。
デフォルトは 1。
ConvertNull
1 または 0。データ変換における null 値の処理方法を制御する。
1 (デフォルト) に設定すると、要求されたデータ型とデータを格納するテーブル カラムのデータ型が照合される。要求された型とカラム型の間の変換が定義されていない場合は、カラム値のデータ型に関係なく、「unsupported data conversion」例外が生成される。
0 に設定すると、カラムの値が null の場合でもデータ型の照合は実行されない。このように設定することで、要求された型とカラム型の間の変換が定義されていない場合でも null 値を返すことが可能になる。
デフォルトは 1。
DatabaseName
省略可能
接続先のデータベースの名前。
Database 接続プロパティ」も参照のこと。
DescribeParameters
noDescribe または describeIfString。ドライバが実行時にデータベースのデータ型に基づいて、String パラメータのサーバへの送信方法を決定するかどうかを制御する。String パラメータをデータベースが予期する型で送信すると、パフォーマンスが向上し、データ型の不一致による予期しないロックの問題を防ぐことができる。
SendStringParametersAsUnicode プロパティは、ドライバが String パラメータ値を Unicode (nvarchar など) として送信するか、Unicode 以外 (varchar など) として送信するかを制御する。このプロパティは、文字カラムのすべてが Unicode または Unicode 以外であるアプリケーションで役立つ。Unicode のカラムと Unicode 以外のカラムの両方にアクセスするアプリケーションでは、ドライバが常に 1 つのフォーマットのみで String パラメータ値をサーバに送信する場合、一部のカラムでデータ型の不一致が発生する。
noDescribe に設定した場合、ドライバはデータベースのデータ型を判断するための SQL パラメータを記述しない。ドライバは SendStringParametersAsUnicode プロパティの設定に基づいて、String パラメータ値をサーバに送信する。
describeIfString に設定した場合、(PreparedStatement メソッドの setString()、setCharacterStream()、および setAsciiStream() を使用して) 1 つまたは複数のパラメータが String としてバインドされている場合に、ドライバはデータベースのデータ型を判断するための SQL パラメータを記述する。ドライバがデータベースのデータ型を判断できたときは、データベースのデータ型が n- 型 (nvarchar など) の場合、ドライバは Stirng パラメータ データを Unicode としてサーバに送信する。データベースのデータ型が n- 型ではない場合、ドライバはパラメータの照合によって定義された文字エンコーディングにデータを変換し、その文字エンコーディングでサーバにデータを送信する。ドライバがデータベースのデータ型を判断できないときは、SendStringParametersAsUnicode プロパティの設定に基づいて、String パラメータ値をサーバに送信する。
デフォルトは noDescribe。
EnableCancelTimeout
true または false。クエリがタイムアウトしたために送信されたキャンセル リクエストに、キャンセルする文と同じクエリ タイムアウト値を適用するかどうかを指定する。
true に設定した場合、キャンセル リクエストは、キャンセルする文に設定されているタイムアウト値と同じ時間でタイムアウトする。たとえば、ある文でアプリケーションが Statement.setQueryTimeout(5) を設定し、タイムアウトが経過したためにその文がキャンセルされた場合、送信されるキャンセル リクエストも実行時間が 5 秒を超えるとタイムアウトする。サーバ ダウン等の理由でキャンセル リクエストがタイムアウトすると、キャンセル リクエストがタイムアウトしたことを示す例外がドライバから送出され、その接続はそれ以降無効となる。
false に設定すると、キャンセル リクエストはタイムアウトしない。
EncryptionMethod
noEncryption、SSL、requestSSL、または loginSSL。ドライバとデータベース サーバの間でネットワークを介して転送するデータやログイン リクエストの暗号化に、SSL 暗号化アルゴリズムを使用するかどうかを指定する。ログイン リクエストを含めてデータの暗号化を行うか、ログイン リクエストのみを暗号化するかの選択については、「データの暗号化」を参照。
SSL に設定すると、ログイン リクエストとデータが SSL で暗号化される。データベース サーバで SSL がサポートされていない場合は、接続に失敗して例外が送出される。SSL を有効にすると、以下のプロパティも適用される。
HostNameInCertificate
TrustStore
TrustStorePassword
ValidateServerCertificate
requestSSL に設定すると、ログイン リクエストとデータが SSL で暗号化される。データベース サーバで SSL がサポートされていない場合は、暗号化なしの接続が確立される。
loginSSL に設定すると、ログイン リクエストが SSL で暗号化される。データベース サーバが SSL を要求するようにコンフィグレーションされている場合、データは SSL で暗号化される。データベース サーバが SSL を要求しない場合、データは暗号化されず、ログイン リクエストのみが暗号化される。
注意 : SSL が有効になっている場合、ドライバはサーバのデフォルト パケット サイズで設定されたデータベース プロトコル パケットを使用して通信する。PacketSize プロパティで設定された値は無視される。
データ暗号化のコンフィグレーションの詳細については、「データの暗号化」を参照。
このプロパティをコンフィグレーションして最適なパフォーマンスを実現する方法については、「パフォーマンスに関する考慮事項」を参照。
デフォルトは noEncryption。
HostNameInCertificate
省略可能
host_name または #SERVERNAME#。SSL 暗号化と証明書の検証が有効になっている (EncryptionMethod=SSL および ValidateServerCertificate=true が指定されている) 場合に、証明書の検証に使用するホスト名を指定する。省略可能なこのプロパティは、ドライバが接続されているサーバが実際に要求されたサーバであることを保証することにより、介在者の攻撃 (man-in-the-middle attack) を防ぐための追加のセキュリティを提供する。
ホスト名が指定されている場合は、指定されたホスト名が、証明書内の SubjectAlternativeName の DNSName 値と照合される。DNSName 値が存在しない場合、ホスト名は証明書のサブジェクト名の共通名 (CN) 部分と照合される。値が一致しない場合は、接続に失敗して例外が送出される。
#SERVERNAME# が指定されている場合は、接続 URL 内に指定されたサーバ名が、証明書内の SubjectAlternativeName の DNSName 値と照合される。DNSName 値が存在しない場合、ホスト名は証明書のサブジェクト名の CN 部分と照合される。値が一致しない場合は、接続に失敗して例外が送出される。
注意 : 複数の CN 部分が存在する場合は、ホスト名がそれぞれの CN 部分と照合される。照合が 1 つでも一致すれば、接続が確立される。
指定しない場合、ドライバはは証明書のホスト名を検証しない。
SSL 暗号化または証明書の検証が有効になっていない場合、このプロパティで指定された値は無視される。
認証のコンフィグレーションの詳細については、「データの暗号化」を参照。
デフォルトは空の文字列。
HostProcess
省略可能
Microsoft SQL Server に接続するアプリケーションのプロセス ID。値は最大 128 文字の文字列。このプロパティの値はデータベース管理に有用となる。この値は以下の hostprocess カラムに格納される。
  • sys.sysprocesses テーブル (Microsoft SQL Server 2005)
  • master.dbo.sysprocesses テーブル (Microsoft SQL Server 2000)
Microsoft SQL Server 7 ではこの値は格納されない。
デフォルトは 0。
InitializationString
ドライバがデータベースへの接続を確立し、その接続のすべての初期化を実行した後に実行する、1 つまたは複数の SQL コマンドを指定する。以下の接続 URL では、null 値の処理を Microsoft SQL Server のデフォルトに設定している。
jdbc:bea:sqlserver://server1:1433;
InitializationString=set ANSI_NULLS off;
DatabaseName=test
複数のコマンドを指定する場合はセミコロンで区切る必要がある。また、このプロパティを接続 URL 内に指定する場合、複数のコマンドを指定するには値全体を括弧で囲む必要がある。以下の接続 URL では、null 値の処理を Microsoft SQL Server のデフォルトに設定し、識別子の区切りを許可している。
jdbc:bea:sqlserver://server1:1433;
InitializationString=(set ANSI_NULLS off;
set QUOTED_IDENTIFIER on);DatabaseName=test
SQL コマンドの実行が失敗すると、接続の試行も失敗し、どの SQL コマンドが失敗したかを示す例外が送出される。
InsensitiveResultSetBufferSize
省略可能
-1、0、または x。ドライバがインセンシティブな結果セット データのキャッシュに使用するメモリの量を指定する。以下のいずれかの値を指定する必要がある。
-1 に設定すると、ドライバはすべてのインセンシティブな結果セット データをメモリにキャッシュする。結果セットのサイズが利用できるメモリ容量を超えると、OutOfMemoryException 例外が生成される。結果セット データをディスクに書き込む必要がないため、データがより効率的に処理される。
0 に設定すると、ドライバは 2GB を限度としてすべてのインセンシティブな結果セット データをメモリにキャッシュする。結果セット データのサイズが利用できるメモリ容量を超えると、その結果セット データがディスクにページングされる。結果セット データがディスクに書き込まれる可能性があるため、ディスクに正しく書き込むためにデータの再フォーマットが必要になることがある。
x (正の整数) に設定すると、インセンシティブな結果セット データのキャッシュに使用するメモリ バッファのサイズ (KB 単位) を指定したことになり、ドライバはすべての結果セット データをメモリにキャッシュする。結果セットのサイズがバッファ サイズを超えると、結果セットがディスクにページングされる。結果セット データがディスクに書き込まれる可能性があるため、ディスクに正しく書き込むためにデータの再フォーマットが必要になることがある。バッファ サイズとして 2 の累乗を指定すると、メモリの使用がより効率的になる。
このプロパティをコンフィグレーションして最適なパフォーマンスを実現する方法については、「パフォーマンスに関する考慮事項」を参照。
デフォルトは 2048 (KB)。
JavaDoubleToString
true または false。double 値や float 値を string 値に変換する際に、ドライバの内部変換アルゴリズムと JVM 変換アルゴリズムのどちらを使用するかを指定する。
true に設定すると、double 値や float 値を string 値に変換する際に JVM 変換アルゴリズムが使用される。
false (デフォルト) に設定すると、double 値や float 値を string 値に変換する際にドライバの内部変換アルゴリズムが使用される。このプロパティを false に設定するとパフォーマンスは向上するが、JVM アルゴリズムを使用した変換との間で、丸めによる多少の誤差が生じる可能性がある。ただし、これらの誤差は double および float データ型の誤差としては許容範囲内。
デフォルトは false。
LoadLibraryPath
ドライバが NTLM 認証に使用される DLL を検索するディレクトリを指定する。値は DLL を格納しているディレクトリの完全修飾パス。ドライバをインストールすると、NTLM DLL は WL_HOME/server/lib ディレクトリに格納される。WL_HOME は WebLogic Server のインストール先ディレクトリ。
デフォルトでは、ドライバは PATH 環境変数で定義されている Windows システム パスのディレクトリで NTLM 認証 DLL を検索する。
Windows システム パスにないディレクトリにドライバをインストールした場合は、このプロパティを設定して NTLM 認証 DLL の場所を指定できる。たとえば、Windows システム パスにない「DataDirect」というディレクトリにドライバをインストールした場合、このプロパティを使用して NTLM 認証 DLL を含むディレクトリを指定できる。
jdbc:bea:sqlserver://server3:1433;
DatabaseName=test;LoadLibraryPath=C:\DataDirect\lib;
User=test;Password=secret
NTLM 認証の詳細については、「NTLM 認証のコンフィグレーション」を参照。
LoginTimeout
ドライバが接続が確立されるのを待機する時間 (秒単位)。この時間が経過すると、制御がアプリケーションに返され、タイムアウト例外が送出される。
0 (デフォルト) に設定すると、接続リクエストはタイムアウトしない。
LongDataCacheSize
-1、0、または x。ドライバが結果セット内の長いデータ (画像、ピクチャ、長いテキスト、バイナリ テキスト) をキャッシュするかどうかを決定する。パフォーマンスを向上させるために、アプリケーションが結果セット内の定義順にカラムを取得する場合は長いデータのキャッシュを無効にできる。
-1 に設定した場合、ドライバは結果セット内の長いデータをキャッシュしない。サーバでキャッシュされる。この値は、アプリケーションが結果セット内の定義順にカラムを取得する場合にのみ使用する。
0 に設定した場合、ドライバは結果セット内の長いデータをメモリにキャッシュする。結果セット データのサイズが利用できるメモリ容量を超えると、その結果セット データがディスクにページングされる。
x (正の整数) に設定した場合、ドライバは結果セット内の長いデータをメモリにキャッシュする。この値を使用して、結果セット データのキャッシュに使用するメモリ バッファのサイズ (KB 単位) が設定される。結果セット データのサイズが利用できるメモリ容量を超えると、その結果セット データがディスクにページングされる。
このプロパティをコンフィグレーションして最適なパフォーマンスを実現する方法については、「パフォーマンスに関する考慮事項」を参照。
デフォルトは 2048。
NetAddress
省略可能
Microsoft SQL Server に接続するアプリケーションのネットワーク インタフェース カードのメディア アクセス制御 (MAC) アドレス。この値は最大 12 文字の文字列。このプロパティの値はデータベース管理に有用となる。この値は以下の net_address カラムに格納される。
  • sys.sysprocesses テーブル (Microsoft SQL Server 2005)
  • master.dbo.sysprocesses テーブル (Microsoft SQL Server 2000)
デフォルトは 000000000000。
PacketSize
-1、0、または x。データベース サーバからクライアント マシンに転送される各データベース プロトコル パケットのバイト数を決定する (Microsoft SQL Server ではこのパケットのことを「ネットワーク パケット」と呼ぶ)。
パケット サイズを調整するとパフォーマンスが向上する可能性がある。最適なサイズは、アプリケーションやその実行環境によって挿入、更新、または返されるデータの一般的なサイズによって異なる。通常は、パケット サイズを大きくするほど大量のデータを処理しやすくなる。たとえば、アプリケーションが 10,000 文字の長さの値を定期的に返す場合は、一般に 32 (16 KB) の値を使用するとパフォーマンスが向上する。
-1 に設定した場合、ドライバはデータベース サーバで使用されているデフォルトの最大パケット サイズを使用する。
0 (デフォルト) に設定した場合、ドライバは 64KB のパケット サイズを使用する。
x (1 ~ 128 の整数) に設定した場合、ドライバは 512 バイトの倍数のパケット サイズを使用する。たとえば、PacketSize=8 の場合は、パケット サイズが 8 * 512 バイト (4096 バイト) に設定される。
このプロパティをコンフィグレーションして最適なパフォーマンスを実現する方法については、「パフォーマンスに関する考慮事項」を参照。
デフォルトは 0。
Password
Microsoft SQL Server データベースに接続する場合に使用するパスワード。大文字と小文字は区別されない。パスワードは、データベースで SQL Server 認証が有効化されている場合にのみ必要となる。その場合は、システム管理者に連絡してパスワードを取得する。
認証のコンフィグレーションの詳細については、「認証」を参照。
PortNumber
省略可能
Microsoft SQL Server データベースへの接続をリスンするプライマリ データベース サーバの TCP ポート。
このプロパティは、データ ソース接続でのみサポートされる。
デフォルトは 1433。
ProgramName
省略可能
Microsoft SQL Server に接続するアプリケーションの名前。この値は最大 128 文字の文字列。このプロパティの値はデータベース管理に有用となる。この値は以下の program_name カラムに格納される。
  • sys.sysprocesses テーブル (Microsoft SQL Server 2005)
  • master.dbo.sysprocesses テーブル (Microsoft SQL Server 2000)
Microsoft SQL Server 7 ではこの値は格納されない。
デフォルトは空の文字列。
QueryTimeout
整数、-1、または 0。接続によって作成されるすべての文のデフォルトのクエリ タイムアウトを秒単位で設定する。
正の整数に設定すると、その値が接続によって作成されるすべての文のデフォルト タイムアウトとして使用される。この接続オプションで設定したデフォルト タイムアウトをオーバーライドするには、Statement.setQueryTimeout() メソッドを呼び出して特定の文のタイムアウト値を設定する。
-1 に設定すると、クエリ タイムアウト機能が無効になる。ドライバは、通知なしで Statement.setQueryTimeout() メソッドを呼び出す。
0 (デフォルト) に設定すると、デフォルトのクエリ タイムアウトは無限大となる (クエリはタイムアウトしない)。
ReceiveStringParameterType
NVARCHAR、VARCHAR、または DESCRIBE。ドライバが String のストアド プロシージャの出力パラメータをデータベースに記述する方法を指定する。
NVARCHAR (デフォルト) に設定した場合、ドライバは String のストアド プロシージャの出力パラメータを nvarchar (4000) として記述する。接続によって返されるすべての出力パラメータが nchar または nvarchar の場合は、この値を使用する。出力パラメータが char または varchar の場合、ドライバは出力パラメータ値を返すが、返された値は 4000 文字に制限される。
VARCHAR に設定した場合、ドライバは String のストアド プロシージャの出力パラメータを varchar (8000) として記述する。接続によって返されるすべての出力パラメータが char または varchar の場合は、この値を使用する。出力パラメータが nchar または nvarchar の場合は、データが適切に返されない可能性がある。この問題は、返されたデータがデータベースのデフォルトのコード ページ以外のコード ページを使用している場合に発生する。
DESCRIBE に設定した場合、ドライバはストアド プロシージャのパラメータを記述するリクエストをデータベースに送信する。ドライバはドライバによって返されるパラメータのデータ型を使用して、String の出力パラメータを nvarchar と varchar のどちらで記述するかを決定する。nvarchar と varchar の出力パラメータの組み合わせがあり、varchar 出力パラメータが 4000 文字よりも大きな値を返す可能性がある場合は、この値を使用する。このメソッドはいつでも機能するが、出力パラメータを記述する分の負荷が生じる。
デフォルトは NVARCHAR。
ResultSetMetaDataOptions
0 または 1。アプリケーションでテーブル名情報が必要な場合は、Select 文の ResultSet メタデータにテーブル名情報を含めて返すことができる。
0 (デフォルト) に設定した場合は、ResultSetMetaData.getTableName() メソッドが呼び出されても、結果セットの各カラムの正しいテーブル名を特定するための追加処理は実行されない。この場合、getTableName() メソッドは結果セット内のカラムごとに空の文字列を返す可能性がある。
1 に設定した場合は、ResultSetMetaData.getTableName() メソッドが呼び出されると、結果セットの各カラムの正しいテーブル名を特定するための追加処理が実行される。ドライバは、ResultSetMetaData.getSchemaName() メソッドと ResultSetMetaData.getCatalogName() メソッドが呼び出された場合、スキーマ名とカタログ名の情報を返すこともできます (ドライバがこの情報を判別できる場合)。
ResultSet メタデータを返す方法の詳細については、「ResultSet メタデータのサポート」を参照してください。
デフォルトは 0。
SelectMethod
省略可能
direct または cursor。SQL Server ドライバが、Select 文でデータベース カーソルを要求するかどうかを判定するためのヒント。ドライバが要求されたメソッドを常に満たせるとは限らないので、ドライバのパフォーマンスと動作は、ヒントとして定義されるこのプロパティによって影響を受ける。
  • direct (デフォルト) に設定した場合、データベース サーバはクエリに応答するときに、ドライバへの 1 つの応答ですべての結果セットを送信する。要求された結果セット型が前方専用の結果セットである場合、サーバサイドのデータベース カーソルは作成されない。通常、応答はドライバによってキャッシュされない。このメソッドでは、ドライバはクエリの応答全体を処理してからでないと、次のクエリを送信できない。同じ接続で別の文を使うなどしてクエリがもう 1 つ送信された場合、ドライバは 2 番目のクエリを送信する前に最初のクエリの応答をキャッシュする。通常、Cursor メソッドよりも Direct メソッドのほうがパフォーマンスが良い。
  • cursor に設定した場合、サーバサイドのカーソルが要求される。前方専用の結果セットを返すときに、サーバからブロック単位で行が取得される。前方専用の結果セットが返される場合、setFetchSize() メソッドを使用すると、各リクエストで取得する行数を制御できる。パフォーマンス テストの結果から、前方専用の結果セットを返す場合、Statement.setFetchSize() の値がパフォーマンスに大きく影響することがわかっている。setFetchSize() の値を決定するための簡単なルールはない。setFetchSize の値を変えて実験して、アプリケーションのパフォーマンスが最高になる値を特定することが望ましい。Cursor メソッドは、大量のデータが得られるクエリ、特に複数の結果セットを開く場合に効果的である。
このプロパティをコンフィグレーションして最適なパフォーマンスを実現する方法については、「パフォーマンスに関する考慮事項」を参照。
デフォルトは Direct。
SendStringParametersAsUnicode
省略可能
true または false。Microsoft SQL Server データベースに送信される文字列パラメータを Unicode で送信するか、データベースのデフォルト文字エンコーディングで送信するかを指定する。
true (デフォルト) に設定すると、文字列パラメータは Microsoft SQL Server に Unicode で送信される。
false に設定すると、文字列パラメータはデフォルト エンコーディングで送信される。サーバは Unicode 文字をデフォルト エンコーディングに変換する必要がないので、パフォーマンスは向上する。
CodePageOverride プロパティに値が設定されている場合にこのプロパティを true に設定すると、このプロパティが無視されて警告が生成される。
このプロパティをコンフィグレーションして最適なパフォーマンスを実現する方法については、「パフォーマンスに関する考慮事項」を参照。
デフォルトは true。
ServerName
必須
プライマリ データベース サーバまたは名前付きのインスタンスの IPv4 または IPv6 形式の IP アドレスを指定するか、ネットワークで名前付きのサーバがサポートされている場合はサーバ名を指定する。たとえば、122.23.15.12 または SQLServerServer のように指定する。
名前付きのインスタンスに接続するには、このプロパティに server_name\\instance_name と指定する。server_name は指定したサーバ上の接続先インスタンスの IP アドレスで、instance_name はそのインスタンスの名前。
このプロパティは、データ ソース接続でのみサポートされる。
名前付きインスタンスへの接続の詳細については、「名前付きインスタンスへの接続」を参照してください。
SnapshotSerializable
true または false。Microsoft SQL Server 2005 のみ。接続で Snapshot アイソレーションを使用できるようにする。
接続で Snapshot アイソレーションをコンフィグレーションするには、Microsoft SQL Server 2005 データベースを Snapshot アイソレーション用にコンフィグレーションする必要がある。アプリケーションではトランザクション アイソレーション レベルを Serializable に設定し、このプロパティを true に設定する必要がある。
false (デフォルト) に設定し、アプリケーションでトランザクション アイソレーション レベルを Serializable に設定した場合、アプリケーションは Serializable アイソレーション レベルを使用する。
このプロパティは Serializable アイソレーション レベルが設定されているアプリケーションで有用。この場合に SnapshotSerializable プロパティを使用すると、コードの変更を回避するか最小限に抑えながら Snapshot アイソレーションを使用できる。新しいアプリケーションを開発している場合は、TRANSACTION_SNAPSHOT 定数の使用が適している場合もある。詳細については、「アイソレーション レベル」を参照。
このプロパティをコンフィグレーションして最適なパフォーマンスを実現する方法については、「パフォーマンスに関する考慮事項」を参照。
デフォルトは false。
TransactionMode
implicit または explicit。ドライバによるローカル トランザクションの開始の区切り方法を制御する。
implicit に設定すると、implicit トランザクション モードが使用される。この場合、トランザクション対応の文が実行されると、ドライバではなく Microsoft SQL Server が自動的にトランザクションを開始する。通常、トランザクションを開始するためにドライバがコマンドを送信する必要がなく、必要になるまでトランザクションが開始されないため、implicit トランザクション モードの方が explicit トランザクション モードよりも効率的になる。implicit トランザクション モードのときに TRUNCATE TABLE 文が使用された場合、Microsoft SQL Server はエラーが発生するとトランザクションをロールバックする。この状況が起きる場合は、このプロパティの値に explicit を使用する。
explicit に設定すると、explicit トランザクション モードが使用される。この場合、前のトランザクションがコミットまたはロールバックされると、Microsoft SQL Server ではなくドライバが新しいトランザクションを開始する。
デフォルトは implicit。
TrustStore
SSL サーバ認証を使用している場合に、使用するトラストストア ファイルのディレクトリを指定する。トラストストア ファイルには、クライアントが信頼する認証局 (CA) のリストが格納されている。
この値によって、javax.net.ssl.trustStore Java システム プロパティに指定されたトラストストア ファイルのディレクトリがオーバーライドされる。このプロパティが指定されていない場合は、javax.net.ssl.trustStore Java システム プロパティに指定されたトラストストア ファイルのディレクトリが使用される。
このプロパティは、ValidateServerCertificate=false に設定されている場合は無視される。
TrustStorePassword
SSL サーバ認証を使用している場合に、使用するトラストストア ファイルのパスワードを指定する。トラストストア ファイルには、クライアントが信頼する認証局 (CA) のリストが格納されている。
この値によって、javax.net.ssl.trustStorePassword Java システム プロパティに指定されたトラストストア ファイルのパスワードがオーバーライドされる。このプロパティが指定されていない場合は、javax.net.ssl.trustStorePassword Java システム プロパティに指定されたトラストストア ファイルのパスワードが使用される。
このプロパティは、ValidateServerCertificate=false に設定されている場合は無視される。
User
Microsoft SQL Server データベースに接続する場合に使用するユーザ名。大文字と小文字は区別されない。ユーザ名は、データベースで SQL Server 認証が有効化されている場合にのみ必要となる。その場合は、システム管理者に連絡してユーザ名を取得する。
UseServerSideUpdatableCursors
true または false。更新可能な結果セットが要求されたときに、ドライバがサーバサイドのカーソルを使用するかどうかを指定する。
true に設定すると、更新可能な結果セットが要求されたときにサーバサイドで更新可能なカーソルが作成される。
false に設定すると、デフォルトの更新可能結果セット機能が使用される。
サーバサイドで更新可能なカーソルの使用方法については、「サーバサイドで更新可能なカーソル」を参照。
このプロパティをコンフィグレーションして最適なパフォーマンスを実現する方法については、「パフォーマンスに関する考慮事項」を参照。
デフォルトは false。
ValidateServerCertificate
true または false。SSL 暗号化が有効 (EncryptionMethod=SSL) になっている場合に、データベース サーバから送信された証明書を検証するかどうかを指定する。SSL サーバ認証を使用する場合、サーバから送信されるすべての証明書は、信頼性のある認証局 (CA) で発行されたものでなければならない。テスト環境においては、信頼性のある CA が発行した証明書でなくても、サーバから返されたすべての証明書をドライバが信頼するようにすることで、テスト環境内の各クライアントでトラストストア情報を指定する手間を省くことができる。
false (デフォルト) に設定すると、データベース サーバから送信された証明書は検証されない。TrustStore および TrustStorePassword プロパティ (または対応する Java システム プロパティ) に指定されたトラストストア情報は無視される。
true に設定すると、データベース サーバから送信された証明書が検証される。サーバから送信されるすべての証明書は、トラストストア ファイル内の信頼性のある CA によって発行されたものでなければならない。HostNameInCertificate プロパティを指定した場合は、ホスト名による証明書の検証も行われる。省略可能なこの HostNameInCertificate プロパティは、ドライバが接続されているサーバが実際に要求されたサーバであることを保証することにより、介在者の攻撃 (man-in-the-middle attack) を防ぐための追加のセキュリティを提供する。
トラストストア情報は、TrustStore および TrustStorePassword プロパティ (または対応する Java システム プロパティ) を使用して指定する。
認証のコンフィグレーションの詳細については、「データの暗号化」を参照。
WSID
省略可能
ワークステーション ID。通常は、アプリケーションがあるコンピュータのネットワーク名。値は最大 128 文字の文字列。このプロパティの値はデータベース管理に有用となり、sp_who および Transact-SQL HOST_NAME 関数によって返される。この値は以下の hostname カラムに格納される。
  • sys.sysprocesses テーブル (Microsoft SQL Server 2005)
  • master.dbo.sysprocesses テーブル (Microsoft SQL Server 2000)
Microsoft SQL Server 7 ではこの値は格納されない。
デフォルトは空の文字列。
XATransactionGroup
省略可能
接続によって開始された各トランザクションを特定するためのトランザクション グループ ID。この ID は、分散トランザクションのクリーンアップに使用できる。
XAResource.recover メソッドを使用すると、準備されていない状態のままのトランザクションをロールバックできる。XAResource.recover を呼び出すと、XAResource.recover を呼び出す際の接続の ID と一致し、準備されていない状態のトランザクションはロールバックされる。たとえば、XATransactionGroup=ACCT200 を指定し、同じ接続上で XAResource.recover を呼び出した場合、トランザクション グループ ID「ACCT200」で識別され、準備されていない状態のままのトランザクションはロールバックされる。
分散トランザクションのクリーンアップの詳細については、「分散トランザクションのクリーンアップ」を参照。
XMLDescribeType
longvarchar または longvarbinary。XML データ型を、LONGVARCHAR または LONGVARBINARY のうちどちらのデータ型にマップするかを指定する。
longvarchar (デフォルト) に設定すると、XML データ型は LONGVARCHAR データ型にマップされる。
longvarbinary に設定すると、XML データ型は LONGVARBINARY データ型にマップされる。
詳細については、「返される XML データとその挿入/更新」を参照。
デフォルトは longvarchar です。

 


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

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

EncryptionMethod

データの暗号化と復号化により余分なオーバーヘッド (主に CPU の使用率) がかかるため、パフォーマンスが低下する場合があります。

InsensitiveResultSetBufferSize

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

LongDataCacheSize

アプリケーションが画像、ピクチャ、長いテキスト、またはバイナリ データを取得するときのパフォーマンスを向上させるために、アプリケーションが長いデータ カラム値を結果セット内での定義順に取得する場合は、クライアントで長いデータのキャッシュを無効にすることができます。アプリケーションが長いデータ カラム値を順不同で取得する場合は、長いデータ値をクライアントでキャッシュする必要があります。この場合は、データをディスクに書き込む前にドライバによって使用されるメモリの容量を増やすことで、パフォーマンスを改善できます。

PacketSize

通常、クライアントはサーバで許可されている最大パケット サイズを使用するのが適しています。これにより、クライアントへデータを返すために必要な往復回数が減るため、パフォーマンスが向上します。つまり、このプロパティにデータベース サーバの最大パケット サイズを設定すると、パフォーマンスを向上させることができます。

ResultSetMetaDataOptions

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

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

SelectMethod

ほとんどの場合、サーバサイドのデータベース カーソルを使用するとパフォーマンスに悪影響を与えます。ただし、アプリケーションが次のような条件に該当する場合は、このプロパティの最適な設定は cursor です。この設定は、サーバサイドのデータベース カーソルを使用することを表します。

SendStringParametersAsUnicode

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

SnapshotSerializable

このプロパティを機能させるには、Microsoft SQL Server 2005 データベースで Snapshot アイソレーションをコンフィグレーションする必要があります。詳細については、「スナップショット アイソレーション レベルの使用 (Microsoft SQL Server 2005 のみ)」を参照してください。

Snapshot アイソレーションでは、データが変更されるまでデータのロックを取得しないことで、トランザクションレベルの読み込みの一貫性とオプティミスティックなデータ変更手法を提供します。別のトランザクションがデータを変更していても一貫して同じ結果セットを返したい場合で、1) アプリケーションで多数の読み込み操作を実行する場合、または、2) アプリケーションに長期間のトランザクションがあり、そのトランザクションがユーザによるデータの読み込みをブロックするする可能性がある場合は、この Microsoft SQL Server 2005 の機能が役立つ可能性があります。この機能を使用すると、読み込み操作と更新操作の間のデータ競合が排除される可能性があります。この接続プロパティを true に設定する (その結果、Snapshot アイソレーションを使用する) 場合、同時実効性が上がるためパフォーマンスが向上します。

UseServerSideUpdatableCursors

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

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

 


データ型

表 5-2 に、SQL Server ドライバでサポートされる SQL Server 7 および SQL Server 2000 のデータ型と、対応する JDBC データ型を示します。

表 5-2 Microsoft SQL Server データ型
Microsoft SQL Server の
データ型
JDBC のデータ型
bigint1
BIGINT
bigint identity 1
BIGINT
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
nvarchar(max)2
LONGVARCHAR
real
REAL
smalldatetime
TIMESTAMP
smallint
SMALLINT
smallint identity
SMALLINT
smallmoney
DECIMAL
sql_variant 1
VARCHAR
sysname
VARCHAR
text
LONGVARCHAR
timestamp
BINARY
tinyint
TINYINT
tinyint identity
TINYINT
uniqueidentifier
CHAR
varbinary
VARBINARY
varbinary(max) 2
LONGVARBINARY
varchar
VARCHAR
varchar(max) 2
LONGVARCHAR
xml 2
LONGVARCHAR

1 Microsoft SQL Server 2000 以降でのみサポートされる。

2 Microsoft SQL Server 2005 でのみサポートされる。

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

 


返される XML データとその挿入/更新

Microsoft SQL Server 2005 では、SQL Server ドライバで XML データ型がサポートされます。XML データ型は、デフォルトでは JDBC LONGVARCHAR データ型にマップされますが、XMLDescribeType 接続プロパティの値を longvarbinary に設定することで LONGVARCHAR データ型にマップすることも可能です。

返される XML データ

ドライバからは、XML データを文字データまたはバイナリ データとして返すことができます。たとえば、あるデータベース テーブルを次のように定義したとします。

CREATE TABLE xmlTable (id int, xmlCol xml NOT NULL)

そして、次のようにコーディングしたとします。

String sql="SELECT xmlCol FROM xmlTable";
ResultSet rs=stmt.executeQuery(sql);

この場合、データベースから返される XML データが文字データになるかバイナリ データになるかは、XMLDescribeType プロパティの設定によって決まります。XMLType データ型は、デフォルトでは JDBC LONGVARCHAR データ型にマップされます。次の接続 URL で XML データ型が LONGVARBINARY データ型にマップされている場合は、ドライバによって返される XML データが文字データではなくバイナリ データになります。

jdbc:bea:sqlserver://server1:1433;DatabaseName=jdbc;User=test;
Password=secret;XMLDescribeType=longvarbinary

文字データ

XMLDescribeType=longvarchar に設定した場合、XML データは文字データとして返されます。結果セット カラムは、カラム型の LONGVARCHAR で表現され、カラム型名は xml となります。

XMLDescribeType=longvarchar に設定した場合は、アプリケーションで以下のメソッドを使用することで、XML カラムに文字データとして格納されているデータを返すことができます。

ResultSet.getString()
ResultSet.getCharacterStream()
ResultSet.getClob()
CallableStatement.getString()
CallableStatement.getClob()

データベース サーバから返された XML データは、データベース サーバで使用する UTF-8 エンコーディングから、UTF-16 Java 文字列エンコーディングに変換されます。

アプリケーションで次のメソッドを使用することで、XML カラムに ASCII データとして格納されているデータを返すことができます。

ResultSet.getAsciiStream()

データベース サーバから返された XML データは、データベース サーバで使用する UTF-1 エンコーディングから、ISO-8859-1 (latin1) エンコーディングに変換されます。

注意 : getAsciiStream() メソッドを使用して変換を行う場合に、コンテンツ エンコーディングがデフォルト エンコーディングではなく、コンテンツ エンティティを指定する XML 宣言が含まれていないと、整形式でない XML が作成される場合があります。アプリケーションで整形式の XML が必要になる場合は、getAsciiStream() メソッドを使用しないようにしてください。

XMLDescribeType=longvarbinary に設定した場合は、この節で説明した文字データ用のメソッドを使用しないでください。使用すると、JDBC 文字からバイナリへの標準の変換がデータに適用され、文字データの 16 進表現が返されます。

バイナリ データ

XMLDescribeType=longvarbinary に設定した場合、XML データはバイナリ データとして返されます。結果セット カラムは、カラム型の LONGVARBINARY で表現され、カラム型名は xml となります。

アプリケーションで以下のメソッドを使用して、XML データをバイナリ データとして返すことができます。

ResultSet.getBytes()
ResultSet.getBinaryStream()
ResultSet.getBlob()
ResultSet.getObject()
CallableStatement.getBytes()
CallableStatement.getBlob()
CallableStatement.getObject()

データベース サーバから返される XML データにはデータ変換は適用されません。これらのメソッドは、UTF-8 としてエンコードされた XML データを格納するバイト配列またはバイナリ ストリームを返します。

XMLDescribeType=longvarchar に設定した場合は、この節で説明した文字データ用のメソッドを使用しないでください。使用すると、JDBC バイナリから文字への標準の変換がデータに適用され、バイナリ データの 16 進表現が返されます。

XML データの挿入と更新

ドライバからは、XML データを文字データまたはバイナリ データとして挿入または更新できます。

文字データ

アプリケーションで以下のメソッドを使用することで、XML データを文字データとして挿入または更新できます。

PreparedStatement.setString()
PreparedStatement.setCharacterStream()
PreparedStatement.setClob()
PreparedStatement.setObject()
ResultSet.updateString()
ResultSet.updateCharacterStream()
ResultSet.updateClob()
ReultSet.updateObject()

データの文字表現がデータベース サーバで使用する XML 文字セットに変換され、変換後の XML データがサーバに送信されます。XML 処理手順が、ドライバによって解析されたり削除されたりすることはありません。

アプリケーションで以下のメソッドを使用することで、XML データを ASCII データとして更新できます。

PreparedStatement.setAsciiStream()
ResultSet.updateAsciiStream()

これらのメソッドに返すデータは、ISO-8859-1 (latin 1) エンコーディングで解釈されます。ISO-8859-1 のデータがデータベース サーバで使用する XML 文字セットに変換され、変換後の XML データがサーバに送信されます。

バイナリ データ

アプリケーションで以下のメソッドを使用することで、XML データをバイナリ データとして挿入または更新できます。

PreparedStatement.setBytes()
PreparedStatement.setBinaryStream()
PreparedStatement.setBlob()
PreparedStatement.setObject()
ResultSet.updateBytes()
ResultSet.updateBinaryStream()
ResultSet.updateBlob()
ReultSet.updateObject()

XML データがデータベース サーバに送信される際に、データ変換が適用されることはありません。

 


認証

認証では、ユーザの識別情報を保護することで、悪意のあるハッカーが転送中のユーザ資格を傍受できないようになっています。概要については「認証」を参照してください。

SQL Server ドライバでは、以下の認証方法がサポートされます。

NTLM 認証 (Windows クライアントの認証のみを提供) を除いて、ドライバがサポート対象のプラットフォームで実行されている場合、これらの認証方法で認証が提供されます。

AuthenticationMethod 接続プロパティは、ドライバが接続を確立する際に使用する認証メカニズムを指定するために使用します。このプロパティに設定する値の詳細については、「AuthenticationMethod プロパティの使用」を参照してください。

AuthenticationMethod プロパティの使用

AuthenticationMethod 接続プロパティは、ドライバが接続を確立する際に使用する認証メカニズムを指定するために使用します。AuthenticationMethod=auto の場合、ドライバは以下の条件に基づいて、接続を確立する際に SQL Server 認証、Kerberos 認証、または NTLM 認証を使用します。

AuthenticationMethod=kerberos に設定すると、接続を確立する際に Kerberos 認証が使用されます。User プロパティと Password プロパティに指定された値は無視されます。

AuthenticationMethod=ntlm の場合は、ドライバが NTLM 認証に必要な DLL をロードできる場合、ドライバは接続を確立する際に NTLM 認証を使用します。DLL をロードできない場合は、ドライバから例外が送出されます。User プロパティと Password プロパティに指定された値は無視されます。

AuthenticationMethod=userIdPassword (デフォルト) に設定すると、接続を確立する際に SQL Server 認証が使用されます。User プロパティはユーザ ID を提供します。Password プロパティはパスワードを提供します。ユーザ ID が指定されていない場合は、ドライバから例外が送出されます。

SQL Server 認証のコンフィグレーション

  1. AuthenticationMethod プロパティを auto または userIdPassword (デフォルト) に設定します。このプロパティに設定する値の詳細については、「AuthenticationMethod プロパティの使用」を参照してください。
  2. User プロパティにユーザ ID を設定します。
  3. Password プロパティにパスワードを設定します。

Kerberos 認証のコンフィグレーション

この節では、Microsoft SQL Server ドライバに Kerberos 認証をコンフィグレーションする場合の要件と手順について説明します。

製品要件

ドライバに Kerberos 認証をコンフィグレーションする前に、使用している環境が 表 5-3 の要件を満たしていることを確認してください。

表 5-3 SQL Server ドライバに Kerberos 認証をコンフィグレーションする場合の要件
コンポーネント
要件
Microsoft SQL Server データベース サーバ
データベース サーバはクライアントを管理している同じドメイン コントローラによって管理され、以下のいずれかのデータベースを実行している必要がある。
  • Microsoft SQL Server 2005
  • Microsoft SQL Server 2000
  • Microsoft SQL Server 2000 Enterprise Edition (64 ビット) Service Pack 2 以上
Kerberos サーバ
Kerberos サーバは、認証に使用するユーザ ID を管理する。Kerberos KDC も Kerberos サーバで管理する。
以下のいずれかのオペレーティング システム上の Windows Active Directory がネットワーク認証を提供する必要がある。
  • Windows Server 2003
  • Windows 2000 Server Service Pack 3 以上
クライアント
クライアントはデータベース サーバを管理している同じドメイン コントローラによって管理される必要がある。また、J2SE 1.4.2 以上がインストールされている必要がある。

ドライバをコンフィグレーションする

WebLogic Server JDBC ドライバをインストールする際には、Kerberos 認証で必要となる以下のファイルが WL_HOME/server/lib フォルダにインストールされます。なお、WL_HOME は WebLogic Server のインストール ディレクトリです。

ドライバをコンフィグレーションするには
  1. ドライバの AuthenticationMethod プロパティを auto (デフォルト) または kerberos に設定します。このプロパティに設定する値の詳細については、「AuthenticationMethod プロパティの使用」を参照してください。
  2. krb5.conf ファイルを変更して、Kerberos レルム名とその Kerberos レルムの KDC 名を指定します。テキスト エディタで編集するか、java.security.krb5.realm および java.security.krb5.kdc システム プロパティを指定して、krb5.conf ファイルを変更します。
  3. 注意 : Windows Active Directory では、Kerberos レルム名は Windows ドメイン名、KDC 名は Windows ドメイン コントローラ名となります。

    たとえば、Kerberos レルム名が XYZ.COM、KDC 名が kdc1 である場合、krb5.conf ファイルは次のようになります。

    [libdefaults] 
    default_realm = XYZ.COM

    [realms]
    XYZ.COM = {
    kdc = kdc1
    }

    krb5.conf ファイルに有効な Kerberos レルム名と KDC 名が指定されていない場合は、次の例外が送出されます。

    Message:[BEA][SQLServer JDBC Driver]Could not establish a connection using integrated security: No valid credentials provided

    java.security.krb5.conf システム プロパティで別の Kerberos コンフィグレーション ファイルをロードするように設定されていない限り、WebLogic JDBC と一緒にインストールされた krb5.conf ファイルが自動的にロードされます。

  4. Java 2 プラットフォームのセキュリティ マネージャで Kerberos 認証を使用する場合は、アプリケーションとドライバにセキュリティ パーミッションを付与する必要があります。詳細については、「Kerberos 認証のためのパーミッション」を参照してください。

SQL Server ドライバでの Windows 認証用に環境をコンフィグレーションおよびテストする方法については、以下の URL を参照してください。

http://www.datadirect.com/developer/jdbc/index.ssp

Kerberos 認証のユーザ資格の指定 (資格の委託)

デフォルトでは、オペレーティング システムに保持されているユーザ ID とパスワードを使用して、データベースにアクセスするユーザの認証が行われます。オペレーティング システムで使用されているユーザ名とパスワードをデータベースでも使用できるため、有効なオペレーティング システム アカウントにログインしているユーザであれば、ユーザ名とパスワードを入力せずにデータベースにログインできます。

オペレーティング システムのユーザ名とパスワード以外のユーザ資格セットを使用したい場合もあります。たとえば、アプリケーション サーバや Web サーバの多くは、サーバ ユーザとしてではなく、アプリケーションが実行されているマシンにログオンしたクライアント ユーザの代理として処理を実行します。

オペレーティング システムのユーザ名とパスワード以外のユーザ資格セットを使用する場合は、次のようなコードをアプリケーションに追加し、認証に使用する javax.security.auth.Subject を取得してドライバに渡します。

import javax.security.auth.Subject;
import javax.security.auth.login.LoginContext;
import java.sql.*;

// ここでは、認証に使用する javax.security.auth.Subject
// インスタンスを作成する。LoginContext を使用して
// Subject を取得する方法の詳細については、JAAS (Authentication and
// Authorization Service) のドキュメントを参照。

LoginContext lc = null;
Subject subject = null;

try {

lc = new LoginContext("JaasSample", new TextCallbackHandler());
lc.login();
subject = lc.getSubject();
}
catch (Exception le) {
... // ログイン エラーを表示する。
}

// このアプリケーションは、ドライバ コードをサブジェクトとして実行することで、
// javax.security.auth.Subject をドライバに渡す。

Connection con =
(Connection) Subject.doAs(subject, new PrivilegedExceptionAction() {

public Object run() {

Connection con = null;
try {

Class.forName("com.ddtek.jdbc.sqlserver.SQLServerDriver");
String url = "jdbc:bea:sqlserver://myServer:1433";
con = DriverManager.getConnection(url);
}
catch (Exception except) {

... // 接続エラーをログに記録する。
return null;
}

return con;
}
});

// これで、このアプリケーションで使用する接続がサブジェクトを使用して
// 認証されたことになる。これにより、アプリケーションで接続を使用できるようになる。
Statement stmt = con.createStatement();
String sql = "select * from employee";
ResultSet rs = stmt.executeQuery(sql);

... // 結果に基づいて処理を行う。

Kerberos チケット認可チケットの取得

アプリケーション ユーザが Kerberos 認証を使用する場合は、まず Kerberos サーバから Kerberos チケット認可チケット (TGT) を取得する必要があります。Kerberos サーバでは、TGT に格納されている資格を使用して、ユーザの識別情報を検証し、サービスへのアクセスを制御します。

Windows クライアント上のアプリケーションから Kerberos 認証を使用する場合は、アプリケーション ユーザが Kerberos サーバにログオンして明示的に TGT を取得する必要はありません。ユーザの TGT は、Windows Active Directory によって自動的に取得されます。

UNIX または Linux クライアント上のアプリケーションから Kerberos 認証を使用する場合、ユーザは kinit コマンドを使用して Kerberos サーバにログオンし、明示的に TGT を取得する必要があります。たとえば、次に示すコマンドは、有効期間が 10 時間で 5 日間更新可能な TGT をサーバに要求しています。

kinit -l 10h -r 5d user

ここで、user はアプリケーション ユーザです。

kinit コマンドの使用とユーザの TGT の取得については、Kerberos ドキュメントを参照してください。

NTLM 認証のコンフィグレーション

この節では、DB ドライバに NTLM 認証をコンフィグレーションする場合の要件と手順について説明します。

製品要件

環境で NTLM 認証をコンフィグレーションする前に、使用している環境が 表 5-4 の要件を満たしていることを確認してください。

表 5-4 SQL Server ドライバに NTLM 認証をコンフィグレーションする場合の要件
コンポーネント
要件
データベース サーバ
データベース サーバはクライアントを管理している同じドメイン コントローラによって管理され、以下のいずれかのデータベースを実行している必要がある。
  • Microsoft SQL Server 2005
  • Microsoft SQL Server 2000 Service Pack 3 以上
  • Microsoft SQL Server 2000 Enterprise Edition (64 ビット) Service Pack 2 以上
ドメイン コントローラ
ドメイン コントローラはデータベース サーバとクライアントの両方を管理している必要がある。以下のいずれかのオペレーティング システム上の NTLM がネットワーク認証を提供する必要がある。
  • Windows Server 2003
  • Windows 2000 Server Service Pack 3 以上
クライアント
クライアントはデータベース サーバを管理している同じドメイン コントローラによって管理され、以下のいずれかのオペレーティング システムで実行されている必要がある。
  • Windows Vista
  • Windows Server 2003
  • Windows XP Service Pack 2 以上
  • Windows 2000 Service Pack 4 以上
  • Windows NT 4.0
また、J2SE 1.3 以上がインストールされている必要がある。

ドライバをコンフィグレーションする

WebLogic Type 4 JDBC ドライバは以下の NTLM 認証 DLL を提供しています。

xx は 2 桁の数字です。

DLL は WL_HOME/server/lib ディレクトリにあります (WL_HOME は WebLogic Server のインストール先ディレクトリ)。NTLM 認証を使用するアプリケーションが 32 ビット JVM で実行されている場合は、自動的に DDJDBCAuthxx.dll が使用されます。同様に、アプリケーションが 64 ビット JVM で実行されている場合は、DDJDBC64Authxx.dll または DDJDBCx64Authxx.dll が使用されます。

ドライバをコンフィグレーションするには
  1. AuthenticationMethod プロパティを auto (デフォルト) または ntlm に設定します。このプロパティに設定する値の詳細については、「AuthenticationMethod プロパティの使用」を参照してください。
  2. デフォルトでは、ドライバは PATH 環境変数で定義されている Windows システム パスのディレクトリで NTLM 認証 DLL を検索します。Windows システム パスにないディレクトリにドライバをインストールした場合は、以下のいずれかの手順を行ってドライバが DLL をロードできるようにします。
    • Windows システム パスに WL_HOME/server/lib ディレクトリを追加する。WL_HOME は WebLogic Server のインストール先ディレクトリ。
    • WL_HOME/server/lib から Windows システム パス上のディレクトリに NTLM 認証 DLL をコピーする。WL_HOME は WebLogic Server のインストール先ディレクトリ。
    • LoadLibraryPath プロパティを指定して、NTLM 認証 DLL の場所を指定する。たとえば、Windows システム パスにない「DataDirect」というディレクトリにドライバをインストールした場合、LoadLibraryPath プロパティを使用して NTLM 認証 DLL を含むディレクトリを指定できます。
    • jdbc:bea:sqlserver://server3:1521;
      DatabaseName=test;LoadLibraryPath=C:\DataDirect\lib;User=test;Password=secret
  3. Java 2 プラットフォームのセキュリティ マネージャで NTLM 認証を使用する場合は、ドライバが接続を確立できるようにセキュリティ パーミッションを付与する必要があります。例については、「接続を確立するためのパーミッション」を参照してください。

 


データの暗号化

SQL Server ドライバでは、データ暗号化で SSL がサポートされます。SSL が提供する暗号化と認証によって、データの整合性を確保できます。詳細については、「ネットワーク上でのデータの暗号化」を参照してください。

Microsoft SQL Server のコンフィグレーションに応じて、ログイン リクエストを含むすべてのデータを暗号化するか、ログイン リクエストのみを暗号化するかを選択できます。データではなくログイン リクエストを暗号化する方法は、以下のシナリオで有用です。

注意 : SSL が有効になっている場合、ドライバはサーバのデフォルト パケット サイズで設定されたデータベース プロトコル パケットを使用して通信します。PacketSize プロパティで設定された値は無視されます。

Microsoft SQL Server での SSL の使用

Microsoft SQL Server データベース サーバで信頼性のある CA によって署名された SSL 証明書がコンフィグレーションされている場合、サーバでは SSL 暗号化を省略可能または必須としてコンフィグレーションできます。必須の場合、SSL 暗号化をサポートしていないクライアントからの接続は失敗します。

最高水準のセキュリティには署名済みの信頼性のある SSL 証明書をお勧めしますが、Microsoft SQL Server 2005 では、サーバで SSL 証明書がコンフィグレーションされていない場合でも、限定的なセキュリティ保護を提供できます。信頼性のある証明書がインストールされていない場合、サーバは自己署名証明書を使用してデータではなくログイン リクエストを暗号化します。

表 5-5 では、EncryptionMethod プロパティの各値と Microsoft SQL Server の各種コンフィグレーションに応じた動作を示します。

表 5-5 EncryptionMethod プロパティと Microsoft SQL Server コンフィグレーション
SSL 証明書なし
SSL 証明書
SSL 省略可能
SSL 必須
noEncryption
ログイン リクエストとデータは暗号化されない。
ログイン リクエストとデータは暗号化されない。
接続の試行は失敗する。
SSL
接続の試行は失敗する。
ログイン リクエストとデータは暗号化される。
ログイン リクエストとデータは暗号化される。
requestSSL
ログイン リクエストとデータは暗号化されない。
ログイン リクエストとデータは暗号化される。
ログイン リクエストとデータは暗号化される。
loginSSL
Microsoft SQL Server 2005 : ログイン リクエストは暗号化されるが、データは暗号化されない。
Microsoft SQL Server 2000 : 接続の試行は失敗する。
ログイン リクエストは暗号化されるが、データは暗号化されない。
ログイン リクエストとデータは暗号化される。

SSL 暗号化のコンフィグレーション

  1. アプリケーション用の暗号化のタイプを選択します。
    • ドライバでログイン リクエストを含めてすべてのデータを暗号化するには、EncryptionMethod プロパティを SSL または requestSSL に設定します。
    • ドライバでログイン リクエストのみを暗号化するには、EncryptionMethod プロパティを loginSSL に設定します。
  2. SSL サーバ認証に使用するトラストストア ファイルの場所とパスワードを指定します。TrustStore および TrustStorePassword プロパティ、またはそれぞれに対応する Java システム プロパティ (javax.net.ssl.trustStore および javax.net.ssl.trustStorePassword) を設定します。
  3. データベース サーバから送信された証明書を検証する場合は、ValidateServerCertificate プロパティを true に設定します。
  4. 必要に応じて、証明書の検証に使用するホスト名を HostNameInCertificate プロパティに設定します。HostNameInCertificate プロパティは、ドライバが接続されているサーバが実際に要求されたサーバであることを保証することにより、介在者の攻撃 (man-in-the-middle attack) を防ぐための追加のセキュリティを提供します。

 


結果を返す DML (Microsoft SQL Server 2005)

SQL Server ドライバでは、Insert、Update、および Delete 文で Microsoft SQL Server 2005 の Output 句をサポートします。たとえば、以下の文でテーブルを作成したとします。

CREATE TABLE table1(id int, name varchar(30))

以下の Update 文では、table1 の id カラムの値を更新し、古い ID (新しい ID で置換される)、新しい ID、これらの ID に関連付けられた名前を含む結果セットを返します。

UPDATE table1 SET id=id*10 OUTPUT deleted.id as oldId, inserted.id as newId, inserted.name

ドライバは別の結果セットで Insert、Update、または Delete 文の結果と更新回数を返します。出力結果セットが最初に返され、続いて Insert、Update、または Delete 文の結果が返されます。結果を返す DML をアプリケーション内で実行するには、Statement.execute() または PreparedStatement.execute() メソッドを使用します。その後に Statement.getMoreResults () を使用して、出力結果セットと更新回数を取得します。次に例を示します。

String sql = "UPDATE table1 SET id=id*10 OUTPUT deleted.id as oldId,
inserted.id as newId, inserted.name";
boolean isResultSet = stmt.execute(sql);

int updateCount = 0;
while (true) {

if (isResultSet) {
resultSet = stmt.getResultSet();
while (resultSet.next()) {

System.out.println("oldId: " + resultSet.getInt(1) +
"newId: " + resultSet.getInt(2) +
"name: " + resultSet.getString(3));
}
resultSet.close();
}
else {
updateCount = stmt.getUpdateCount();
if (updateCount == -1) {
break;
}

System.out.println("Update Count: " + updateCount);
}

isResultSet = stmt.getMoreResults();
}

 


SQL エスケープ シーケンス

SQL Server ドライバでサポートされている SQL エスケープ シーケンスについては、「JDBC の SQL エスケープ シーケンス」を参照してください。

 


アイソレーション レベル

SQL Server ドライバは Microsoft SQL Server の以下のアイソレーション レベルをサポートします。

* Microsoft SQL Server 2005 でのみサポート

デフォルトは Read Committed with Locks (Microsoft SQL Server 2005) または Read Committed です。

 


スナップショット アイソレーション レベルの使用 (Microsoft SQL Server 2005 のみ)

Snapshot アイソレーション レベルは以下のいずれかの方法で使用できます。

 


スクロール可能なカーソルの使用

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 ごとに繰り返す必要があります。

JTA 用ストアド プロシージャをインストールするには
  1. 適切な sqljdbc.dll および instjdbc.sql ファイルを WL_HOME\server\lib ディレクトリから MS SQL データベース サーバの SQL_Server_Root/bin ディレクトリにコピーします。WL_HOME は WebLogic Server のインストール先ディレクトリ (通常は c:\bea\wlserver_10.x) です。
  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 プロシージャを格納したり、既存のプロシージャの変更をログに記録したりするための容量がマスター データベースで不足していると、スクリプトは失敗します。

 


分散トランザクションのクリーンアップ

トランザクションが完了する前にサーバへの接続が失われると、分散トランザクションに関連付けられている接続が孤立する可能性があります。分散トランザクションに関連付けられた接続が孤立すると、そのトランザクションのデータベースによって保持されているロックが維持されるため、データが使用できなくなる可能性があります。分散トランザクションをクリーンアップすると、それらのトランザクションに関連付けられている接続が解放され、データベースによって保持されているロックも解放されます。

XAResource.recover メソッドを使用すると、準備済みでコミットやロールバックはされていない分散トランザクションをクリーンアップできます。このメソッドを呼び出すと、準備済みでコミットやロールバックはされていないアクティブな分散トランザクションのリストが返されます。アプリケーションは XAResource.recover から返されたリストを使用し、それらを明示的にコミットまたはロールバックすることでトランザクションをクリーンアップできます。XAResource.recover によって返されるトランザクションのリストには、アクティブなトランザクションや準備済みでないトランザクションは含まれません。

また、SQL Server ドライバでは、分散トランザクションのクリーンアップに関する以下の方法をサポートしています。

トランザクション タイムアウト

トランザクション タイムアウトのタイムアウト値を設定するには、XAResource.setTransactionTimeout メソッドを使用します。この値を設定すると、サーバ サイドの sqljdbc.dll ではアクティブなトランザクションのリストを保持します。分散トランザクションは、開始されるときにアクティブなトランザクションのリストに配置され、該当する XAResource メソッドを使用して準備、ロールバック、コミット、または無視されるときにこのリストから削除されます。

XAResource.setTransactionTimeout メソッドを使用してトランザクション クリーンアップのタイムアウト値が設定されている場合、sqljdbc.dll はアクティブなトランザクションのリストを定期的に監査して、期限切れのトランザクションがないか調べます。タイムアウト値より有効期間が長いアクティブなトランザクションはロールバックされます。トランザクションのロールバック時に例外が生成された場合は、sqljdbc.dll ファイルと同じディレクトリにある sqljdbc.log ファイルに例外が書き込まれます。

トランザクションのタイムアウト値を小さすぎる値に設定すると、正常に完了していない限りトランザクションがロールバックされてしまう危険性があります。一般的なガイドラインとしては、トラフィックの負荷が大きい状況でもトランザクションが十分完了できる時間にタイムアウト値を設定してください。

値を 0 (デフォルト値) に設定すると、トランザクション タイムアウトのクリーンアップは無効になります。

明示的なトランザクションのクリーンアップ

SQL Server ドライバでは、XATransactionGroup 接続プロパティを使用して、ID をトランザクションのグループに関連付けることができます。トランザクションのグループ ID を指定すると、その接続で開始されたすべての分散トランザクションはこの ID で識別されます。

この値を設定すると、サーバ サイドの sqljdbc.dll ではアクティブなトランザクションのリストを保持します。分散トランザクションは、開始されるときにアクティブなトランザクションのリストに配置され、該当する XAResource メソッドを使用して準備、ロールバック、コミット、または無視されるときにこのリストから削除されます。

XAResource.recover メソッドを使用すると、XAResource.recover を呼び出す際に使用された接続上に、トランザクションのグループ ID が一致し、準備されていない状態のままのトランザクションがあれば、ロールバックすることができます。たとえば、XATransactionGroup=ACCT200 を指定し、同じ接続上で XAResource.recover メソッドを呼び出した場合、トランザクション グループ ID が ACCT200 で、準備されていない状態のままのトランザクションはロールバックされます。

トランザクションのロールバック時に例外が生成された場合は、sqljdbc.dll ファイルと同じディレクトリにある sqljdbc.log ファイルに例外が書き込まれます。

明示的なトランザクションのクリーンアップを使用する場合、孤立した接続に関連付けられている分散トランザクションと、その接続で保持されているロックは、アプリケーションが明示的にクリーンアップを呼び出すまで残されます。一般的なルールとして、アプリケーションは起動時と、サーバへの接続が失われたことを通知された場合に、孤立した接続をクリーンアップする必要があります。

 


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 = ?"

ストアド プロシージャ

SQL Server ドライバでは、ストアド プロシージャの引数に対してパラメータ メタデータを返すことはできません。

 


ResultSet メタデータのサポート

アプリケーションでテーブル名情報が必要な場合、SQL Server ドライバは Select 文の ResultSet メタデータに含めてテーブル名情報を返すことができます。ResultSetMetaDataOptions プロパティを 1 に設定した場合、ResultSetMetaData.getTableName() メソッドが呼び出されたとき、SQL Server ドライバは結果セット内の各カラムの正しいテーブル名を決定する追加の処理を実行します。それ以外の場合、getTableName() メソッドは結果セット内のカラムごとに空の文字列を返す可能性があります。

ResultSetMetaDataOptions プロパティが 1 に設定されていて、ResultSetMetaData.getTableName() メソッドが呼び出された場合、SQL Server ドライバが返すテーブル名情報は、結果セット内のカラムがデータベース テーブル内のカラムにマップされているかどうかによって異なります。結果セット内の各カラムがデータベース テーブル内のカラムにマップされている場合、SQL Server ドライバはそのカラムに関連付けられているテーブル名を返します。結果セット内の各カラムがテーブル内のカラムにマップされていない場合 (集約やリテラルなど)、SQL Server ドライバは空の文字列を返します。

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

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 実装をサポートします。

ドライバで RowSet を使用するには、J2SE 1.4 以上が必要です。

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

 


自動生成キーのサポート

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

自動生成キーの値を返すことができるのは、アプリケーションで Insert 文を実行するときです。値を返す方法は、パラメータを含む Insert 文を使用しているかどうかによって異なります。

自動生成キーの値は、Statement.getGeneratedKeys() メソッドを使用して取得できます。このメソッドは、各自動生成キーのカラムとともに ResultSet オブジェクトを返します。

 


Null 値

Microsoft SQL Server ドライバは接続を確立するときに、Microsoft SQL Server のデータベース オプション ansi_nulls を on に設定します。これでドライバが ANSI SQL 標準に準拠するようになり、データベース間を横断するアプリケーションの開発が容易になります。

デフォルトでは、Microsoft SQL Server が SQL の等価比較 (=) または不等価比較 (<>) や集約関数において null 値を評価した場合、ANSI SQL 仕様とは異なる動作となります。たとえば、ANSI SQL 仕様では、以下の Select 文のような col1=null では常に false と評価するよう定義されています。

SELECT * FROM table WHERE col1 = NULL

デフォルトのデータベース設定 (ansi_nulls=off) を使用した同じ比較では、false ではなく true と評価されます。

ansi_nulls を on に設定すると、データベースによる null 値の処理方法が変わり、=NULL ではなく IS NULL の仕様が強制されます。たとえば、以下の Select 文の col1 の値が null である場合、比較の評価は true になります。

SELECT * FROM table WHERE col1 IS NULL

アプリケーションでは以下の方法で、接続に関する Microsoft SQL Server のデフォルトの動作に戻すことができます。

 


Database 接続プロパティ

Database 接続プロパティは、DatabaseName 接続プロパティのシノニムとして使用できます。

接続 URL に Database と DatabaseName の両方の接続プロパティが指定されている場合は、接続 URL 内で後ろの方に指定されているプロパティが使用されます。たとえば、アプリケーションで次のような URL を指定した場合、DatabaseName 接続プロパティの値ではなく、Database 接続プロパティの値が使用されます。

jdbc:bea:sqlserver://server1:1433;DatabaseName=jdbc;Database=acct;
User=test;Password=secret

ページの先頭       前  次