Symfoware(R) Server JDBCドライバユーザーズガイド - FUJITSU -
目次 索引 前ページ次ページ

上へ付録F サンプルアプリケーション

F.7 ストアドプロシジャを使用する

ストアドプロシジャを使用したプログラム例について説明します。

プロシジャ定義

EXEC SQL
CREATE PROCEDURE GENERAL.PROC01 ( IN IWORK1 INT,
                                  INOUT IOWORK1 CHARACTER(20),
                                  OUT OWORK1 INT )
BEGIN
          DECLARE SWORK1  INT;
          DECLARE SWORK2  CHAR(20);

          INSERT INTO GENERAL.EMPLOYEE VALUES(IWORK1,IOWORK1);

          SELECT ID,NAME INTO SWORK1,SWORK2 FROM GENERAL.EMPLOYEE WHERE ID=IWORK1;
          SET OWORK1 = SWORK1;
          SET IOWORK1 = SWORK2;
END
END-EXEC;

 

ストアドプロシジャを使用したプログラム

// 以下のパッケージをインポートします。
import java.util.*;
import java.sql.*;
import javax.sql.*;
import javax.naming.*;
// クラスを定義します。
public class MyPreparedCall
{
    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:10326");
            InitialContext ctx = new InitialContext(env);

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

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

            // 自動コミットの設定
            con.setAutoCommit(false);

            // CallableStatementのオブジェクトを生成します。
            CallableStatement cstmt =
                            con.prepareCall("{CALL GENERAL.PROC01[?,?,?]}");

            // パラメタに値を設定します。
            cstmt.setInt(1,7);
            cstmt.setString(2, "bird");

            // JDBC型を設定します。
            cstmt.registerOutParameter(2,java.sql.Types.CHAR);
            cstmt.registerOutParameter(3,java.sql.Types.INTEGER);

            // データベースにデータを追加します。
            cstmt.executeUpdate();

            int iID = 0;
            String sName = null;

            // 出力パラメタからデータを取得します。
            sName = cstmt.getString(2);
            iID = cstmt.getInt(3);

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

            // CallableStatementのオブジェクトをクローズします。
            cstmt.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();
        }
    }
}

 


目次 索引 前ページ次ページ

All Rights Reserved, Copyright (C) 富士通株式会社 2003