N5SAN5TSA0001DAO.javaの修正方針



懲りずに、N5SAN5TSA0001DAO.javaの修正方針について検討してます。

カーソルを使ったjdbcの更新系のサンプル。
http://www-3.ibm.com/cgi-bin/db2www/data/db2/udb/winos2unix/support/v8infocenter.d2w/report?target=mainFrame&fn=jdbcs-tbmod-java.htm


とりあえず以下のような修正をかけたいのです。

修正1)

N5BZResultDataList.javaがResultSetを読み尽くしてしまっていたので
N5BZResultDataListは使えません。

N5SAN5TSA0001DAOの親クラスのN5SZSecurityBaseDAOで使っている

N5BZDBQueryに

    public N5BZResultDataList execute(N5BZDBConnection con, String sql, int offset, int maxNumber) throws SQLException

に似たメソッドを追加します。
追加するだけなので他のプログラムには影響ないはずです。
                                                      ^^^^^^^^^^^^^^^^^^^^^

    java.sql.ResultSet execute(N5BZDBConnection con, String sql, int offset, int maxNumber, String cursorName)
                                                                                           throws SQLException

を作ります。


N5BZDBQuery.javaのメソッドは以下のようになるはずです。


    public ResultSet execute(N5BZDBConnection con, String sql, int offset, int maxNumber, String cursorName)
                                                                                         throws SQLException
        throws SQLException
    {
        Statement statement = null;
        try
        {
            statement = getStatement(con);
            statement.setMaxRows(offset + maxNumber);
            if (cursorname != null) // カーソル名の設定を行います。
                statement.setCursorName(cursorname);
            ResultSet resultSet = null;
            try
            {
                resultSet = statement.executeQuery(sql);
                N5BZLogManager.accessLogSuccess(con.getUserId(), this, sql);
            }
            catch(SQLException e)
            {
                N5BZLogManager.accessLogFailure(con.getUserId(), this, sql);
                throw e;
            }
            finally
            {
                N5BZDebug.debugPrint(this, sql, dataList);
                //closeResultSet(resultSet); // 上位のアプリケーションの責任でクローズします。
            }
            return resultSet;
        }
        finally
        {
            //closeStatement(statement); // 上位のアプリケーションの責任でクローズします。
        }
    }



修正2)

N5SAN5TSA0001DAO#updateData003()のカーソルを使った更新系にします。


    //N5BZResultDataList rs =  super.query(con,buffSQL.toString());
    java.sql.ResultSet rs =  super.query(con,buffSQL.toString(), ”カーソル名”);

    ...

    buffSQL.append("UPDATE N5TSA0001 SET PRE_LOGIN_DTE = '");
    buffSQL.append(loginDate);
    buffSQL.append("' ");
    buffSQL.append("WHERE current of カーソル名");

    ...
    // 必ず ResultSetのクローズが必要です。
   rs.close();


にように修正します。
これで、CSのリソースでの更新系が組めるを思います。

修正した部分だけののテストを行えばいいので
これで十分でしょう。


2003/07/16 ugya@lycos.com