/**
   * 領域情報を登録する。
   *
   * @param connection コネクション
   * @param addInfo 登録するキーワード情報
   * @throws DataAccessException 登録中に例外が発生した場合。
   * @throws DuplicateKeyException キーに一致するデータが既に存在する場合。
   */
  public void insertRyoikiInfo(Connection connection, RyouikiInfo addInfo)
      throws DataAccessException, DuplicateKeyException {
    // 重複チェック
    try {
      selectRecord(connection, addInfo);
      // NG
      throw new DuplicateKeyException("'" + addInfo + "'は既に登録されています。");
    } catch (NoDataFoundException e) {
      // OK
    }

    String query =
        "INSERT INTO MASTER_RYOIKI "
            + "("
            + " RYOIKI_NO" // 領域番号
            + ",RYOIKI_RYAKU" // 領域略称名
            + ",KOMOKU_NO" // 研究項目番号
            + ",KOUBO_FLG" // 公募フラグ
            + ",KEIKAKU_FLG" // 計画研究フラグ
            // add start liuyi 2006/06/30
            + ",ZENNENDO_OUBO_FLG" // 前年度応募フラグ
            + ",SETTEI_KIKAN_KAISHI" // 設定期間(開始年度)
            + ",SETTEI_KIKAN_SHURYO" // 設定期間(終了年度)
            + ",SETTEI_KIKAN" // 設定期間
            // add end liuyi 2006/06/30
            + ",BIKO" // 備考
            + ")"
            + "VALUES "
            + "(?,?,?,?,?,?,?,?,?,?)";
    PreparedStatement preparedStatement = null;
    try {
      // 登録
      preparedStatement = connection.prepareStatement(query);
      int i = 1;
      DatabaseUtil.setParameter(preparedStatement, i++, addInfo.getRyoikiNo());
      DatabaseUtil.setParameter(preparedStatement, i++, addInfo.getRyoikiName());
      DatabaseUtil.setParameter(preparedStatement, i++, addInfo.getKomokuNo());
      DatabaseUtil.setParameter(preparedStatement, i++, addInfo.getKobou());
      DatabaseUtil.setParameter(preparedStatement, i++, addInfo.getKeikaku());
      // add start liuyi 2006/06/30
      DatabaseUtil.setParameter(preparedStatement, i++, addInfo.getZennendoOuboFlg());
      DatabaseUtil.setParameter(preparedStatement, i++, addInfo.getSettelKikanKaishi());
      DatabaseUtil.setParameter(preparedStatement, i++, addInfo.getSettelKikanShuryo());
      DatabaseUtil.setParameter(preparedStatement, i++, addInfo.getSettelKikan());
      // add end liuyi 2006/06/30
      DatabaseUtil.setParameter(preparedStatement, i++, addInfo.getBiko());

      DatabaseUtil.executeUpdate(preparedStatement);
    } catch (SQLException ex) {
      log.error("領域マスタ情報登録中に例外が発生しました。 ", ex);
      throw new DataAccessException("領域マスタ情報登録中に例外が発生しました。 ", ex);
    } finally {
      DatabaseUtil.closeResource(null, preparedStatement);
    }
  }
  /**
   * 領域番号の件数を取得する。 領域番号順にソートする。
   *
   * @param connection コネクション
   * @param ryoikoNo 領域番号
   * @return
   * @throws ApplicationException
   * @throws DataAccessException
   */
  public String selectRyoikiNoCount(Connection connection, String ryoikoNo)
      throws ApplicationException, DataAccessException {

    String strCount = null;
    ResultSet recordSet = null;
    PreparedStatement preparedStatement = null;

    // -----------------------
    // SQL文の作成
    // -----------------------

    StringBuffer select = new StringBuffer();
    select.append("SELECT COUNT(RYOIKI_NO) ");
    select.append(ISystemServise.STR_COUNT);
    select.append(" FROM");
    select.append(" (SELECT MR.RYOIKI_NO FROM MASTER_RYOIKI MR WHERE MR.ZENNENDO_OUBO_FLG = '1' ");
    select.append("  AND MR.RYOIKI_NO = '");
    select.append(EscapeUtil.toSqlString(ryoikoNo));
    select.append("')");

    if (log.isDebugEnabled()) {
      log.debug("query:" + select.toString());
    }
    try {
      preparedStatement = connection.prepareStatement(select.toString());
      recordSet = preparedStatement.executeQuery();

      if (recordSet.next()) {
        strCount = recordSet.getString(ISystemServise.STR_COUNT);
      } else {
        throw new NoDataFoundException("領域マスタデータテーブルに該当するデータが見つかりません。");
      }
    } catch (SQLException ex) {
      throw new DataAccessException("領域マスタデータテーブルの検索中に例外が発生しました。", ex);
    } catch (NoDataFoundException ex) {
      throw new NoDataFoundException("該当する領域番号が存在しません。", ex);
    }

    return strCount;
  }