Javaの共通クラス

package jp.confrage;

import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Types;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import org.apache.commons.lang3.time.DateUtils;
public class Common{

  /**
   * 文字列型の日付をDate型に変換します.<br>
   * エラーの場合はParseExceptionをthrowします.<br>
   * @author CONFRAGE
   * @since 2016/04/01
   * @param date 年月日(yyyyMMdd型)
   * @return 変換結果
   * @throws ParseException 例外
  */
  public static Date parseStringToDate(String date) throws ParseException {
    DateFormat df = new SimpleDateFormat("yyyyMMdd");
    df.setLenient(false);
    return df.parse(date);
  }

  /**
   * 日数を算出します.<br>
   * 引数で渡された文字列型の日付(from)と日付(to)を元に、fromからtoまでの日数を算出します。(fromとtoの日数を含む).<br>
   * @author CONFRAGE
   * @since 2016/04/01
   * @param from 8桁の日付(yyyyMMdd型)
   * @param to 8桁の日付(yyyyMMdd型)
   * @return 計算された日数
  */
  public static int calcDays(String from, String to) {
    try {
      Date fromDate = parseStringToDate(from);
      Date toDate = parseStringToDate(to);
      // 日数算出
      long day = ((toDate.getTime() - fromDate.getTime()) + (DateUtils.MILLIS_PER_DAY)) / (DateUtils.MILLIS_PER_DAY);
      return (int)day;
    } catch (Exception e) {
      throw new RuntimeException("エラー");
    }
  }
  /**
   * 引数で渡された年(yyyy)、月(MM)を元に、その月の1か月間の日数を算出します.<br>
   * @author CONFRAGE
   * @since 2016/04/01
   * @param year 4桁の日付(yyyy型)
   * @param month 2桁の日付(MM型)
   * @return 1か月の日数
  */
  public static int getActualMaximum(String year, String month) {
    int intYear = Integer.parseInt(year);
    int intMonth = Integer.parseInt(month);

    Calendar cal = Calendar.getInstance();
    cal.clear();
    cal.set(intYear, intMonth - 1,1);
    return cal.getActualMaximum(Calendar.DATE);
  }

 /**
  * SQLにバインド変数を設定します.<br>
  * @author CONFRAGE
  * @since 2016/04/01
  * @param ps プリペアドステートメント
  * @param paramList パラメータリスト
  * @throws SQLException SQL例外
 */
  public static void setQueryParams (PreparedStatement ps, List<Object> paramList) throws SQLException{
    if (ps != null && paramList != null) {
      for (int i = 0; i < paramList.size(); i++) {
        if (paramList.get(i) == null) {
          ps.setNull(i++, Types.NULL);
        } else if (paramList.get(i) instanceof String) {
          ps.setString(i++, (String)paramList.get(i));
        } else if (paramList.get(i) instanceof BigDecimal) {
          ps.setBigDecimal(i++, (BigDecimal)paramList.get(i));
        } else if (paramList.get(i) instanceof Integer) {
          ps.setInt(i++, (int)paramList.get(i));
        } else if (paramList.get(i) instanceof Long) {
          ps.setLong(i++, (long)paramList.get(i));
        } else if (paramList.get(i) instanceof Float) {
          ps.setFloat(i++, (float)paramList.get(i));
        } else if (paramList.get(i) instanceof Double) {
          ps.setDouble(i++, (double)paramList.get(i));
        }
      }
    }
  }

  /**
   * SQL文にパラメータを設定します.<br>
   * @author CONFRAGE
   * @since 2016/04/01
   * conn コネクション
   * sql SQL
   * paramerList パラメータリストのリスト
  */
  public static void executeBatch(Connection conn, String sql, List<List<Object>> paramLists) {
    try (PreparedStatement ps = conn.prepareStatement(sql)) {
      int i = 0;
      for (List<Object> paramList : paramLists) {
        i++;
        if((i % 5000) == 0) {
          ps.executeBatch();
        }
        setQueryParams(ps, paramList);
        ps.addBatch();
      }
      ps.executeBatch();
 
    } catch (BatchUpdateException be) {
 
    } catch (SQLException e) {
      throw new RuntimeException("");
    }
  }
}

スポンサーリンク
  • このエントリーをはてなブックマークに追加
スポンサーリンク

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA