ページの先頭行へ戻る
Symfoware Server V12.1.x アプリケーション開発ガイド(JDBCドライバ編)
FUJITSU Software

A.15 ResultSetを複数同時に利用してデータ参照する

ResultSetを複数同時に利用してデータを参照するプログラム例について説明します。

以下のサンプルアプリケーションでは、ネーミングサービスを起動しているホスト名に、“myhost”を指定しています。サンプルアプリケーションを実行する環境に合わせて、ホスト名の値を修正してください。


ResultSetを複数同時に利用してデータ参照するプログラム例
// 以下のパッケージをインポートします。
import java.util.*;
import java.sql.*;
import javax.sql.*;
import javax.naming.*;
// クラスを定義します。
public class MyMultiResultSetSelect
{
    public static void main(String args[])
    {
        try
        {
            // JNDI環境を指定します。
            Hashtable env = new Hashtable();
            env.put(Context.INITIAL_CONTEXT_FACTORY,"
                  com.fujitsu.symfoware.jdbc2.jndisp.SYMContextFactory");
            env.put(Context.PROVIDER_URL,"SYM://myhost:26600");
            InitialContext ctx = new InitialContext(env);

            // JDBCデータソースを取得します。
            DataSource ds = (DataSource)ctx.lookup("jdbc/ds1");

            // データベースと接続します。
            Connection con = ds.getConnection();

            // 自動コミットモードの無効化
            con.setAutoCommit(false);

            // Statementのオブジェクトを生成します。
            Statement stmt = con.createStatement();

            //SQL文の実行
            boolean retval = stmt.execute("SELECT * FROM TBL1; SELECT * FROM TBL2");
 
            // ResultSetのオブジェクトを生成します。
            ResultSet rs1 = stmt.getResultSet();

            //statementのメソッドを使用し、
            //現在のResultSetをクローズしないで
            //次のResultSetを取得します。
            retval = stmt.getMoreResults (Statement.KEEP_CURRENT_RESULT);
            //次のResultSetが存在するかチェック
            if (retval == false) {
                return;
            }
            // ResultSetのオブジェクトを生成します。
            ResultSet rs2 = stmt.getResultSet();

            int iID = 0;
            String sName = null;
            while(rs1.next())
            {

                // ResultSetの列に対応する
                // データを取得します。
                iID = rs1.getInt(1);
                sName = rs1.getString(2);

                // 取得した情報を表示します。
                System.out.println("ID = " + iID);
                System.out.println("NAME = " + sName);
            }

            while(rs2.next())
            {
                // ResultSetの列に対応する
                // データを取得します。
                iID = rs2.getInt(1);
                sName = rs2.getString(2);

                // 取得した情報を表示します。
                System.out.println("ID = " + iID);
                System.out.println("NAME = " + sName);
            }

            // ResultSetのオブジェクトをクローズします。
            rs1.close();
            rs2.close();

            // Statementのオブジェクトをクローズします。
            stmt.close();

            //トランザクションのコミット
            con.commit();

            // Connectionのオブジェクトをクローズします。
            con.close();
        }

        // SQLExceptionが発生した場合の処理を記述します。
        catch (SQLException e)
        {
            // エラー情報を出力します。
            System.out.println("ERROR MESSAGE : " + e.getMessage());
            System.out.println("SQLSTATE     : " + e.getSQLState());
            System.out.println("ERROR CODE    : " + e.getErrorCode());
            e.printStackTrace();
        }

        // その他のExceptionが発生した場合の処理を記述します。
        catch (Exception e)
        {
            // スタックトレースを出力します。
            System.out.println("ERROR MESSAGE : " + e.getMessage());
            e.printStackTrace();
        }
    }
}