SQLJ 言語は、プログラムが作成される時点で認識される静的 SQL 操作を直接サポートします。実行時までに特定の SQL ステートメントのすべてまたは一部を判別できない場合には、これは動的操作です。 SQLJ から動的 SQL 操作を実行するには、JDBC を使用します。 ConnectionContext オブジェクトには JDBC Connection オブジェクトが含まれます。これを使用して、動的 SQL ステートメントに必要な JDBC Statement オブジェクトを作成できます。
すべての SQLJ ConnectionContext クラスには、引き数として JDBC Connection を取るコンストラクターが含まれます。このコンストラクターを使用して SQLJ ConnectionContext インスタンスを作成し、その基本データベース接続を JDBC Connection のインスタンスと共用します。
SQLJ ConnectionContext インスタンスにはすべて、 JDBC Connection インスタンスを戻す getConnection() メソッドがあります。戻される JDBC Connection は、基本データベース接続を SQLJ ConnectionContext と共用します。これを使用すると、 JDBC API で説明されているような動的 SQL 操作を実行できます。
前述の相互運用性メソッドでは、 SQLJ で使用される接続の抽象化と JDBC で使用される接続の抽象化との間の変換を提供します。どちらの抽象化も同じデータベース・セッション、つまり、基本データベース接続を使用します。したがって、メソッドの呼び出しが一方のオブジェクトのセッション状態に影響を及ぼす場合、他方のオブジェクトにも影響を与えることになります。なぜなら、実際に影響を受けているのは共用されている基本セッションだからです。
JDBC は、新しく作成された接続のセッション状態の省略時値を定義します。たいていの場合、SQLJ はこの省略時値を使用します。しかし、新しく作成された JDBC Connection に省略時値で自動コミット・モードがある場合、 SQLJ ConnectionContext の作成時に自動コミット・モードを明示的に指定する必要があります。
ConnectionContext インスタンスの close() メソッドを呼び出すと、関連する JDBC Connection インスタンスと基本データベース接続がクローズされることになります。 ConnectionContext は、他の ConnectionContext または JDBC Connection (あるいはその両方) と基本データベース接続を共用していることがあるため、 ConnectionContext をクローズするときに基本データベース接続もクローズされてしまうのは望ましくありません。プログラマーは、基本データベース接続を実際にクローズしなくても、ConnectionContext (たとえば、ステートメント・ハンドル) によって保守されるリソースを解放したいと思うかもしれません。このために、ConnectionContext クラスは、基本データベース接続をクローズするかどうかを示すブール引き数を取る close() メソッドもサポートします。データベース接続をクローズする場合には定数 CLOSE_CONNECTION を、接続を保持するには KEEP_CONNECTION を使用します。 close() には引き数を取らない変形したメソッドもあり、これは close(CLOSE_CONNECTION) をすばやく呼び出します。
ConnectionContext インスタンスが不要情報として収集される前に明示的にクローズしていない場合には、 ConnectionContext の終了処理メソッドによって close(KEEP_CONNECTION) が呼び出されます。これにより、接続を使用しているかもしれない他の JDBC および SQLJ オブジェクトの基本データベース接続を保守しつつ、通常の不要情報収集プロセスでは接続関連リソースを再利用できるようになります。他の JDBC や SQLJ オブジェクトが接続を使用していない場合、不要情報収集プロセスによってこのデータベース接続はクローズされ、再利用されることに注意してください。
SQLJ ConnectionContext オブジェクトと JDBC Connection オブジェクトはどちらも、 close() メソッドに応答します。 SQLJ プログラムを作成する際には、 ConnectionContext オブジェクトだけで close() メソッドを呼び出せば十分です。これは、ConnectionContext をクローズすることで、それに関連する JDBC Connection もクローズするためです。しかし、 ConnectionContext の getConnection() メソッドによって戻される JDBC Connection をクローズするだけでは不十分です。これは、JDBC Connection の close() メソッドが、そこに含まれている ConnectionContext をクローズしないためです。したがって、ConnectionContext によって保守されるリソースは、不要情報の収集が実行されるまで解放されません。
close() の変形したメソッドが ConnectionContext インスタンスで呼び出されている場合、 ConnectionContext の isClosed() メソッドは true を戻します。 isClosed() が true を戻す場合、 close() を呼び出してもクローズされません。また、その他のメソッドの呼び出しは未定義です。