Java と COBOL 間のデータベース接続の共有

COBOL と JDBC で共通のデータベース接続を使用できます。これを実現するには、接続がどのように開かれるのかに応じて EXEC SQL 文を組み合わせて使用します。
Java が接続を開く場合
接続のガイドライン
  1. 接続オブジェクトを COBOL に渡します。
  2. EXEC SQL BIND CONNECTION を使用して、接続を確立します。
  3. 接続の使用を終えるとき、引き続き 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 が接続を開く場合
接続のガイドライン
  1. EXEC SQL GET CONNECTION を使用して、Java に渡す接続オブジェクトを取得します。
  2. 接続の使用を終えるとき、引き続き 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 によってカーソルと接続の両方が解除されます。