connect()
sqlLib.connect() システム関数は、実行時にデータベースに対して名前付きの接続を作成し、その接続をアクティブにします。
各実行単位には 1 つの現行接続があります。 デフォルトで、この接続にはデータベースに指定した名前が付いています。この名前は、sqlLib.defineDatabaseAlias() 関数を使用して変更できます。
sqlLib.connect() 関数は、ワークベンチの「新規接続」ウィザードから作成したデフォルトの SQL 接続をオーバーライドします。 このウィザードについて詳しくは、「EGL プログラマー・ガイド」の SQL データベース接続の作成 を参照してください。 VisualAge® Generator または EGL バージョン 5 からコードをマイグレーションしている場合は、『connectionService()』を参照してください。
この sqlLib.connect() 関数は値を戻しませんが、sqlLib.sqlData にシステム変数を設定します。 『sqlLib.sqlData (EGL システム変数)』を参照してください。
構文
sqlLib.connect(
database STRING in,
userID STRING in,
password STRING in
[, disconnectOption DisconnectKind in
[, isolationLevel IsolationLevelKind in
[, commitControl CommitControlKind in]]]] )
- database
- データベース・ストリングは以下の値のいずれであってもかまいません。
- "RESET"
- データベース接続を元の状態に戻します。 このコマンドの正確な意味は、環境、データベース管理ソフトウェア、およびその他の要因などに応じて変わります。 詳しくは、「EGL プログラマー・ガイド」の SQL データベース接続の作成 を参照してください。
- databaseName
- データベースの名前。この名前は、環境、データベース管理ソフトウェア、およびその他の要因などに応じて変わります。 詳しくは、「EGL プログラマー・ガイド」の SQL データベース接続の作成 を参照してください。
- Java™ プログラムとしてコードを実行する場合は、次の点に注意してください。
- 物理データベース名は、vgj.jdbc.database.server プロパティー (server は vgLib.connectionService() 呼び出しで指定したサーバーの名前) を検索することにより見つけることができます。 このプロパティーが定義されていない場合は、vgLib.connectionService() 呼び出しで指定したサーバー名がそのまま使用されます。
- J2EE 接続と非 J2EE 接続では、データベース名の形式が以下のように異なります。
- J2EE 環境で実行されるプログラムを生成した場合には、JNDI レジストリーでのデータ・ソースのバインド先となる名前 (jdbc/MyDB など) を使用します。 J2EE ビルド記述子オプションが YES に設定 されている場合に、この状態が発生します。
- 非 J2EE JDBC 環境のためのプログラムを生成した場合 には、接続 URL (jdbc:db2:MyDB など) を使用します。J2EE が NO に設定 されている場合に、この状態が発生します。
- userID
- データベースへのアクセスに使用するユーザー ID。引数を指定する必要がありますが、COBOL 生成では引数は無視されます。 このトピックの『互換性』のセクションを参照してください。
- password
- データベースへアクセスするときに使用されるパスワード。引数を指定する必要がありますが、COBOL 生成では引数は無視されます。
このパスワードは、関数にストリング・リテラルを渡すと自動的に暗号化されます。 詳しくは、「EGL プログラマー・ガイド」の パスワードの暗号化 を参照してください。 このトピックの『互換性』セクションも参照してください。
- disconnectOption
- このパラメーターは、Java 生成の場合にのみ有効です。
値は列挙型です。これは、以下のいずれかのキーワードでなければなりません (引用符または変数は使用しないでください)。
- explicit (デフォルト)
- プログラムが sysLib.commit() または sysLib.rollback() を呼び出した後も、接続はアクティブのままになります。
接続リソースを解放するには、プログラムで sqlLib.disconnect() を発行する必要があります。
type1 を commitScope の値として使用する場合、disconnectOption パラメーターの値を explicit に設定 (デフォルトに設定してもかまいません) する必要があります。
- automatic
- コミットまたはロールバックによって、既存の接続が終了します。
- conditional
- コミットまたはロールバックによって既存の接続が自動的に終了します (カーソルが開いていて hold オプションがそのカーソルに対して有効である場合を除く)。 hold オプションについて詳しくは、『SQL の open に関する考慮事項』を参照してください。
- isolationLevel
- データベース・トランザクション間の独立性のレベルを指示します。このパラメーターは、Java 生成の場合にのみ有効です。
このプロパティーの値は、IsolationLevelKind の列挙から取得されます。
- デフォルト
- VisualAge Generator との互換モード (vgVar.sqlIsolationLevel の値を使用、『sqlIsolationLevel』を参照) で実行している場合を除き、JDBC ドライバーのデフォルトの分離レベルを使用します。多くのドライバー・ベンダーは repeatableRead を使用していますが、念のため、資料で確認してください。 これは、このパラメーターを指定しなかった場合と同じ動作になります。
- readUncommitted
- 最も緩やかな分離レベルを使用します。つまり、プログラムの実行速度は上がりますが、データベースの実際の状態は検出されない場合があります。
- readCommitted
- 比較的緩やかな分離レベルを使用します。
- repeatableRead
- 比較的厳密な分離レベルを使用します。
- serializableTransaction
- 最も厳密な独立レベルを使用します。つまり、プログラムの実行速度は下がりますが、同時に実行されている他のプログラムによる変更を検出されます。
詳しくは、Oracle が提供する JDBC の資料を参照してください。
- commitControl
- データベースに変更があった場合、必ずコミットを実行するかどうかを指定します。
EGL によって生成された COBOL コードでは無視されます。
以下の値が有効です。
- noAutoCommit (デフォルト) コミットは自動で行われず、通常はプログラムの実行速度が速くなります。この場合のコミットとロールバックの規則については、『作業論理単位』を参照してください。
- autoCommit は、更新を即時反映します。
一時的に autoCommit から noAutoCommit に切り替えることもできます。 詳しくは、『beginDatabaseTransaction()』を参照してください。
例
以下に、sqlLib.connect() 関数の例を示します。
sqlLib.connect(myDatabase, myUserid, myPassword);
互換性
| プラットフォーム | 問題 |
|---|---|
| COBOL 生成 | すべての sqlLib.connect() パラメーター (database を除く) は無視されます。 |
| Java 生成 | Tomcat J2EE サーバーは、sqlLib.connect() 関数の userID および password は無視し、そのサーバー構成にある値を使用します。 |
| J2EE | デフォルトをデータ・ソース (JNDI 名前用に定義済み) に関連付けられたユーザー ID およびパスワードにするには、userID および password に対してブランクまたは空ストリング ("") を使用します。 |