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 プロパティー (servervgLib.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() を発行する必要があります。

type1commitScope の値として使用する場合、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);

互換性

表 1. connect() の互換性に関する考慮事項
プラットフォーム 問題
COBOL 生成 すべての sqlLib.connect() パラメーター (database を除く) は無視されます。
Java 生成 Tomcat J2EE サーバーは、sqlLib.connect() 関数の userID および password は無視し、そのサーバー構成にある値を使用します。
J2EE デフォルトをデータ・ソース (JNDI 名前用に定義済み) に関連付けられたユーザー ID およびパスワードにするには、userID および password に対してブランクまたは空ストリング ("") を使用します。

フィードバック