Javaの共通クラス


/*
 * @(#)Common.java  1.x 01/xx/xx
 *
 * Copyright (c) 2016 CONFRAGE All rights reserved.
 *
 * Java1.7
 */
package jp.confrage;

import java.io.File;
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;
import org.apache.commons.lang.time.DateUtils;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.DateUtil;
public class Common{

  /**
   * プライベートコンストラクタ.<br>
   * 不可視にします.<br>
   */
  private 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
   * @param conn コネクション
   * @param 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("");
    }
  }

  /**
   * ディレクトリとファイルを再帰的に全削除する
   * @param file 削除対象ディレクトリ
   */
  public static final void deleteAll(File file) {
    if (file == null || !file.exists()) return;
    if (file.isFile()) {
      // ファイル削除
      file.delete();
    } else {
      // ディレクトリの場合、再帰
      File[] obj = file.listFiles();
      for (int i = 0; i < obj.length; i++) {
        deleteAll(obj[i]);
      }
      file.delete();
    }
  }
  /**
   *  BigDecimalの数値を###,###,###区切りにします.<br>
   *  1000000を1,000,000にします.<br>
   *  @author CONFRAGE
   *  @since 2017/03/24
   *  @param num 数値
   *  @return カンマつき数値
   */
  public static String addComma(BigDecimal num) {
    return NumberFormat.getInstance().format(num);
  }
  /**
   * Apache POIでエクセルのセルを表示する.
   * @author CONFRAGE
   * @since 2017/05/01
   * @param cell Apache POIのセル
   * @param dateType セルの日付形式(yyyy/MM/ddなど) 
   */
  public static Object getCellValue(Cell cell,String dateType) {
    switch (cell.getCellType()) {
 
      case Cell.CELL_TYPE_STRING:
        return cell.getRichStringCellValue().getString();
 
      case Cell.CELL_TYPE_NUMERIC:
        if (DateUtil.isCellDateFormatted(cell)) {
          Date dateValue = cell.getDateCellValue();
          DateFormat dateFormat = new SimpleDateFormat(dateType);
          return dateFormat.format(dateValue);
        } else {
          return cell.getNumericCellValue();
        }
 
      case Cell.CELL_TYPE_BOOLEAN:
        return cell.getBooleanCellValue();

      case Cell.CELL_TYPE_FORMULA:
        return cell.getCellFormula();

      default:
        return null;
    }
  }
}

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

コメントをどうぞ

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

CAPTCHA