COBOL と JDBC で共通のデータベース接続を使用できます。これを実現するには、接続がどのように開かれるのかに応じて EXEC SQL 文を組み合わせて使用します。
- Java が接続を開く場合
-
- 接続のガイドライン
-
- 接続オブジェクトを COBOL に渡します。
- EXEC SQL BIND CONNECTION を使用して、接続を確立します。
- 接続の使用を終えるとき、引き続き Java から接続にアクセスする場合は EXEC SQL UNBIND CONNECTION を、Java から接続にアクセスしない場合は EXEC SQL DISCONNECT を使用します。
- 例
- Java コードで JDBC 接続を確立し、接続オブジェクトを COBOLSQL クラスの DoCOBOLSQL メソッドに渡します。このメソッドでは、接続にバインドして SQL を実行した後、Java の以降の処理で引き続き JDBC 接続を使用できるようにバインドを解除します。
- COBOLSQL tb = new COBOLSQL();
- Context ctx = new InitialContext();
- DataSource ds = (DataSource)ctx.lookup("mfdb");
- Connection con = ds.getConnection("sa","password");
- tb.DoCOBOLSQL(con);
- ...(他の JDBC アクセス)
COBOL COBOLSQL クラスおよび DoCOBOLSQL メソッド:
class-id COBOLSQL public.
working-storage section.
method-id DoCOBOLSQL.
local-storage section.
exec sql include sqlca end-exec.
linkage section.
01 con type java.sql.Connection.
procedure division using by value con.
exec sql bind connection to :con end-exec
if sqlcode < 0
display "FAIL: Bind Connection " sqlcode
display sqlerrmc
end-if
exec sql … (other SQL) end-exec
exec sql unbind connection end-exec
goback.
end method.
注: この例に示すように、COBOL クラスのメソッドに制限はありません。たとえば、BIND メソッド、DoSQL メソッド、UNBIND メソッドなども使用できます。
- COBOL が接続を開く場合
-
- 接続のガイドライン
-
- EXEC SQL GET CONNECTION を使用して、Java に渡す接続オブジェクトを取得します。
- 接続の使用を終えるとき、引き続き Java から接続にアクセスする場合は EXEC SQL UNBIND CONNECTION を、Java から接続にアクセスしない場合は EXEC SQL DISCONNECT を使用します。
- 例
- Java コードで COBOLSQL クラスの DoCOBOLSQL メソッドを呼び出します。このメソッドでは、データベースに接続して SQL を実行し、接続を取得して Java に返した後、Java の以降の処理で引き続き JDBC 接続を使用できるようにバインドを解除します。
- COBOLSQL tb = new COBOLSQL();
- Connection con = tb.DoCOBOLSQL();
- Statement stat = con.createStatement();
- ResultSet r = stat.executeQuery("select RegionDescription from Region where RegionID = 1");
- r.next();
COBOL COBOLSQL クラスおよび DoCOBOLSQL メソッド:
class-id COBOLSQL public.
working-storage section.
method-id DoCOBOLSQL.
local-storage section.
exec sql include sqlca end-exec.
linkage section.
01 con type java.sql.Connection.
procedure division returning con.
EXEC SQL CONNECT TO :dbname USER :usr END-EXEC
exec sql … (other SQL) end-exec
exec sql get connection into :con end-exec
exec sql unbind connection end-exec
goback.
end method.
注: この例に示すように、COBOL クラスのメソッドに制限はありません。
- 実行単位の終了時
- 実行単位内では、EXEC SQL UNBIND CONNECTION によってカーソルは解除されますが、接続は解除されません。一方、実行単位が終了した時点で UNBIND CONNECTION が呼び出されていない場合は、OpenESQL によってカーソルと接続の両方が解除されます。