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

WebLogic Type 4 JDBC ドライバ ガイド

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

Sybase ドライバ

注意 : BEA WebLogic Type 4 JDBC Sybase ドライバは WebLogic Server 8.1 サービス パック 2 以降のリリースで使用できます。WebLogic Server 8.1 GA およびサービス パック 1 のリリースでは使用できません。

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

 


データベース バージョンのサポート

Sybase 用の BEA WebLogic Type 4 JDBC ドライバ (「Sybase ドライバ」) は次のデータベース バージョンをサポートします。

注意 : XA 接続は Sybase Adaptive Server Enterprise 12.0 以降のバージョンでのみサポートされます。XA 接続は Sybase Adaptive Server 11.5 および 11.9 ではサポートされません。

 


ドライバ クラス

BEA WebLogic Type 4 JDBC Sybase ドライバのドライバ クラスは次のとおりです。

WebLogic Server ドメインで JDBC 接続プールをコンフィグレーションするときに、これらのドライバ クラスを使用します。

 


Sybase URL

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

jdbc:bea:sybase://dbserver:port

 


Sybase 接続プロパティ

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

property=value

注意 : すべての接続文字列プロパティ名で、大文字と小文字は区別されません。たとえば、Password は password と同じです。各接続プロパティに付記されているデータ型は、JDBC 接続プールのプロパティ値で使用される Java データ型です。

表 6-1 Sybase の接続プロパティ

プロパティ

説明

BatchPerformanceWorkaround

省略可能

true または false。バッチ処理の実行に使用されるメソッドを決定する。true に設定すると、ネイティブの Sybase バッチ メカニズムが使用される。

false に設定すると、JDBC 3.0 に準拠したバッチ メカニズムが使用される。ほとんどの場合、ネイティブな Sybase バッチ機能を使用するとパフォーマンスはかなり向上するが、ドライバが常にバッチの更新件数を返せるとは限らない。

デフォルトは false。

バッチ挿入とバッチ更新」を参照。

CodePageOverride

省略可能

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

ConnectionRetryCount

省略可能

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

デフォルトは 0。

ConnectionRetryDelay

省略可能

ConnectionRetryCount が正の整数に設定されている場合に、ドライバがデータベース サーバへの接続を再試行する前に待機する秒数。

デフォルトは 3。

DatabaseName

省略可能

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

InsensitiveResultSetBufferSize

省略可能

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

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

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

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

デフォルトは 2048 (KB)。

LoginTimeout

省略可能

データベース接続の作成の試行を待機する最大時間 (秒単位)。値 0 は、デフォルトのシステム タイムアウトがある場合はそのタイムアウトを使用し、それ以外の場合はタイムアウトがないことを指定する。

Password

Sybase データベースに接続する場合に使用するパスワード。大文字と小文字を区別する。パスワードは、データベースでセキュリティが有効化されている場合にのみ必要となる。その場合は、システム管理者に連絡してパスワードを取得する。

PortNumber

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

デフォルトはオペレーティング システムによって異なる。

PrepareMethod

省略可能

StoredProc、StoredProclfParam、または Direct。 サーバに Prepared Statement 用のストアド プロシージャを作成するかどうかを指定する。

StoredProc に設定すると、文が準備されるときにストアド プロシージャが作成され、Prepared Statement が実行されるときにストアド プロシージャが実行される。

StoredProcIfParam に設定すると、Prepared Statement に 1 つまたは複数のパラメータ マーカが含まれる場合にのみストアド プロシージャが作成される。この場合も、文が準備されるとストアド プロシージャが作成され、Prepared Statement が実行されるとストアド プロシージャが実行される。Prepared Statement にパラメータ マーカが含まれない場合、ストアド プロシージャは作成されず、Prepared Statement が直接実行される。

Direct に設定すると、Prepared Statement 用のストアド プロシージャは作成されず、Prepared Statement が直接実行される。パラメータ メタデータが要求された場合は、ストアド プロシージャが作成されることがある。

デフォルトは StoredProclfParam。

アプリケーションが Prepared Statement を複数回実行する場合は、このプロパティを StoredProc または StoredProclfParam に設定するとパフォーマンスが向上する。これは、いったん作成されたストアド プロシージャは、単一の SQL 文よりも高速に実行できるため。一方、Prepared Statement を 1 回しか実行しない、または 1 回も実行しない場合はパフォーマンスが低下するおそれがある。これは、ストアド プロシージャを作成する際のサーバへの負荷が、単一の SQL 文を実行する負荷よりも大きいため。アプリケーションが Prepared Statement を複数回実行することがない場合は、このプロパティを Direct に設定することが望ましい。

SelectMethod

省略可能

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

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

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

デフォルトは Direct。

ServerName

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

User

Sybase データベースに接続する場合に使用するユーザ名。大文字と小文字は区別されない。ユーザ名は、データベースでセキュリティが有効化されている場合にのみ必要となる。その場合は、システム管理者に連絡してユーザ名を取得する。


 

 


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

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

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

属性

[URL] (URL)

jdbc:bea:sybase://host:port

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

weblogic.jdbc.sybase.SybaseDriver

[プロパティ] (Properties)

user=username
PortNumber=port
url=jdbc:bea:sybase://host:port
ServerName=host
DatabaseName=dbname

[パスワード] (Password)

password

[対象] (Target)

server or cluster name


 

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

属性

[URL] (URL)

jdbc:bea:sybase://host:port

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

weblogic.jdbcx.sybase.SybaseDataSource

[プロパティ] (Properties)

user=username
PortNumber=port
url=jdbc:bea:sybase://host:port
ServerName=host
DatabaseName=dbname

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

true (ローカル トランザクションの場合にのみ必須)

[パスワード] (Password)

password

[対象] (Target)

server or cluster name

 


表 6-4 XA WebLogic Type 4 Sybase JDBC ドライバ使用時の接続プールの属性

属性

[URL] (URL)

jdbc:bea:sybase://host:port

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

weblogic.jdbcx.sybase.SybaseDataSource

[プロパティ] (Properties)

user=username
PortNumber=port
url=jdbc:bea:sybase://host:port
ServerName=host
DatabaseName=dbname

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

true (ローカル トランザクションの場合にのみ必須)

[パスワード] (Password)

password

[対象] (Target)

server or cluster name

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

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

BatchPerformanceWorkaround

ドライバは、JDBC 3.0 に準拠したバッチ メカニズムまたはネイティブの Sybase バッチ メカニズムを使用してバッチ処理を実行できます。ネイティブの Sybase バッチ環境を使用すると、特にパフォーマンスの負荷が大きいネットワークの往復が問題となっている場合に、パフォーマンスを向上させることができます。ネイティブのメカニズムを使用する場合は、バッチを実行してエラーが発生したとき、ドライバはバッチ内でエラーを引き起こした文を判別できないことに注意してください。また、バッチの中にストアド プロシージャを呼び出した文やトリガを実行した文が含まれる場合、各バッチ文またはパラメータ セットに対する複数の更新件数が生成されます。JDBC 3.0 に準拠したメカニズムでは、JDBC 3.0 仕様に従って、バッチ内の各文またはパラメータ セットに対する個々の更新件数が返されます。Sybase のネイティブのバッチ メカニズムを使用するには、このプロパティを true に設定する必要があります。

InsensitiveResultSetBufferSize

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

MaxPooledStatements

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

PrepareMethod

アプリケーションが Prepared Statement を複数回実行する場合は、このプロパティを StoredProc に設定するとパフォーマンスが向上します。これは、いったん作成されたストアド プロシージャは、単一の SQL 文よりも高速に実行できるためです。アプリケーションが Prepared Statement を複数回実行することがない場合は、このプロパティを Direct に設定する必要があります。この設定の場合、ストアド プロシージャが作成されるとパフォーマンスが低下します。これは、ストアド プロシージャを作成する際のサーバへの負荷が、単一の SQL 文を実行する負荷よりも大きいためです。

ResultSetMetaDataOptions

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

 


データ型

表 6-2 では、Sybase ドライバでサポートされるデータ型を示し、JDBC データ型へどのようにマップされるかを示します。

表 6-5 Sybase データ型

Sybase データベース

Sybase のデータ型

JDBC のデータ型

Sybase 11.5 以降

binary

BINARY

bit

BIT

char

CHAR

datetime

TIMESTAMP

decimal

DECIMAL

float

FLOAT

image

LONGVARBINARY

int

INTEGER

money

DECIMAL

nchar

CHAR

numeric

NUMERIC

nvarchar

VARCHAR

real

REAL

smalldatetime

TIMESTAMP

smallint

SMALLINT

smallmoney

DECIMAL

sysname

VARCHAR

text

LONGVARCHAR

timestamp

VARBINARY

tinyint

TINYINT

varbinary

VARBINARY

varchar

VARCHAR

Sybase 12.5 以降

date

DATE

time

TIME

unichar

CHAR

univarchar

VARCHAR


 

注意 : SYBASE ADAPTIVE SERVER 12.5 以降を使用する場合、Sybase ドライバは character および binary のカラムでの XNL (extended new limits) をサポートします。長さが 255 を超えるカラムがサポートされます。character および binary のカラムにおける XNL の詳細については、Sybase のマニュアルを参照してください。

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

 


SQL エスケープ シーケンス

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

 


アイソレーション レベル

Sybase ドライバは、トランザクション アイソレーション レベルとして Read CommittedRead UncommittedRepeatable Read、および Serializable をサポートしています。デフォルトは Read Committed です。

 


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

Sybase ドライバは、ID カラムを持つテーブルから結果セットが返される場合にのみ、スクロールセンシティブな結果セットをサポートします。Sybase ドライバでも、スクロールインセンシティブな結果セット、および更新可能な結果セットをサポートしています。

注意 : Sybase ドライバが、要求された結果セットのタイプまたは同時実行性をサポートできない場合は、カーソルを自動的にダウングレードして詳細情報の入った SQLWarning を生成します。

 


Large Object (LOB) のサポート

Sybase では Blob または Clob データ型は定義されていませんが、Sybase ドライバによって、Blob および Clob 用に設計された JDBC メソッドを使用して長いデータの LONGVARBINARY および LONGVARCHAR データを取得および更新できます。これらのメソッドを使用して長いデータを Blob または Clob として更新すると、更新は Blob または Clob オブジェクト内のデータのローカル コピーに対して行われます。

Blob および Clob 用の JDBC メソッドを使用して長いデータを取得および更新すると、Blob および Clob を操作した場合と同じメリットが得られます。たとえば Blob および Clob を使用した場合、

Blob および Clob を使用した場合のこうしたメリットを得るには、データをキャッシュする必要があります。データをキャッシュするので、特に一度にデータの逐次読み出しを行う場合に、パフォーマンスが低下します。長いデータのサイズが使用可能なメモリよりも大きいと、パフォーマンスが著しく低下することがあります。

 


バッチ挿入とバッチ更新

Sybase ドライバは次のバッチ メカニズムを提供します。

Sybase のネイティブのバッチ メカニズムを使用するには、BatchPerformanceWorkaround 接続プロパティを true に設定します。接続プロパティの指定の詳細については、 「Sybase 接続プロパティ」を参照してください。

 


パラメータ メタデータのサポート

Sybase ドライバは、あらゆるタイプの SQL 文のパラメータ メタデータを返すことができます。

 


ResultSet メタデータのサポート

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

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

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

Sybase ドライバでは、ResultSetMetaData.getSchemaName() メソッドまたは ResultSetMetaData.getCatalogName() メソッドが呼び出されたときに、スキーマ名情報またはカタログ名情報を返すこともできます (ドライバがこれらの情報を特定できる場合)。たとえば次の文の場合、Sybase ドライバはカタログ名として「test」、スキーマ名として「test1」、テーブル名として「foo」を返します。

SELECT * FROM test.test1.foo 

テーブル名、スキーマ名、およびカタログ名の情報を返すために必要となる追加処理は、ResultSetMetaData.getTableName()ResultSetMetaData.getSchemaName()、または ResultSetMetaData.getCatalogName() の各メソッドが呼び出された場合にのみ実行されます。

 


RowSet のサポート

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

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

 


自動生成キーのサポート

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

自動生成キーの値を取得する方法は、使用する Insert 文にパラメータが含まれるかどうかによって異なります。

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

 


NULL 値

Sybase ドライバは、接続を確立すると Sybase のデータベース オプション ansinull を on に設定します。ansinull を on に設定すると、ドライバと ANSI SQL 標準との互換性が保証され、ドライバが JDBC 用他の DataDirect Connect ドライバと同じように動作することが保証されます。これにより、複数のデータベースを使用するアプリケーションの開発が容易になります。

デフォルト設定の Sybase では、SQL の等号 (=) を使用した比較で NULL 値を評価すると、ANSI SQL 仕様とは異なる結果になります。たとえば ANSI SQL 仕様では、col1=null の評価結果は常に false になると定められています。しかし Sybase のデフォルト設定 (ansinull=off) では、次の文の col1 の値が NULL である場合、比較の評価結果は false ではなく true になります。

SELECT * FROM table WHERE col1 = NULL

ansinull を on に設定すると、データベースのデフォルトの動作が変更され、SQL 文では =NULL の代わりに必ず IS NULL が使用されるようになります。 Sybase ドライバでは、たとえば次の文の col1 の値が NULL である場合、比較の評価結果は true になります。

SELECT * FROM table WHERE col1 IS NULL

接続時に変更された Sybase の動作をデフォルトに戻すには、接続の確立後にアプリケーションで次の文を実行します。

SET ANSINULL OFF

 


Sybase の JTA のサポート

グローバル トランザクションで Sybase XA ドライバを使用するには、グローバル トランザクションをサポートするように Sybase サーバを設定しておく必要があります。『WebLogic JTA プログラマーズ ガイド』の「XA をサポートするための Sybase サーバの設定」を参照してください。

 

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