おいちゃんと呼ばれています

ウェブ技術や日々考えたことなどを綴っていきます

Jakarta Commons HttpClient によるSBI証券での自動売買(7) - 会社四季報の企業概要をデータベースへ格納編(実行&ログ)

これまで会社四季報の企業概要データをデータベースへ格納するコードを書いてきましたが,今日の内容はそれらのコードを呼び出すところです。

ついでにログをログテーブルに書き込みます。ログの書込みは別クラスに担当させています。

**サンプルコード

|java| public class ImportCampany {

public static void main(String[] args) {

    // ログ
    Log log = new Log();    // ログを書き込むクラス(後述)
    log.setStartTime();
    System.out.println("開始時刻: " + log.getStartTime());
    System.out.println("------------------------------------------------------------");

    SBI_Client sbi = new SBI_Client();  // これまで書いてきたコードは,
                                        // 実はこういう名前のクラスでした

    try {
        sbi.login();

    } catch (Exception e) {
        e.printStackTrace();
        System.out.println("ログインに失敗しました。");
        return;
    }

    String minCd = "1001";
    String maxCd = "9999";
    int count = sbi.importCampany(minCd, maxCd);

    if (count == 0) {
        System.out.println("企業概要データの取込に失敗しました。");
        return;
    }

    System.out.println("------------------------------------------------------------");
    System.out.println(count + " 件の企業概要データを格納しました。");
    log.setEndTime();
    System.out.println("終了時刻: " + log.getEndTime());
    System.out.println("処理時間: " + log.getDiffTime());

    // ログを書き込む
    log.setWork("企業概要");
    log.setCount(count);
    log.setRemark("最小コード: " + minCd + ", 最大コード: " + maxCd + ", HttpClient - Java");
    log.writeLog();
}

} ||<

次にログを書き込むクラスです。以前紹介した Appache Commons Lang を使っています。2つの時間(時刻)の差を HH:mm:ss 形式で表現できるので,まさに今回の分野で大活躍してくれています。

**サンプルコード 2

|java| import java.sql.SQLException; import java.text.DateFormat; import java.util.Date; import org.apache.commons.lang.time.DurationFormatUtils;

public class Log {

/**
 * 処理の開始時刻
 */
private Date startTime;

/**
 * 処理の終了時刻
 */
private Date endTime;

/**
 * 処理時間
 */
private String diffTime;

/**
 * 処理内容
 */
private String work;

/**
 * 処理数
 */
private int count;

/**
 * 備考
 */
private String remark;

/**
 * DateFormat
 *
 * yyyy/MM/dd HH:mm;ss
 */
private DateFormat dateFormat =
    DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM);

/**
 * 開始時刻をセットする
 */
public void setStartTime() {
    this.startTime = new Date();
}

/**
 * 終了時刻をセットする
 * 処理時間を計算する
 */
public void setEndTime() {
    this.endTime = new Date();
    this.setDiffTime();
}

/**
 * 処理時間を計算する
 */
public void setDiffTime() {
    this.diffTime = DurationFormatUtils.formatPeriod(
            this.startTime.getTime(), this.endTime.getTime(), "HH:mm:ss");
}

/**
 * 処理内容をセットする
 */
public void setWork(String str) {
    this.work = str;
}

/**
 * 処理数をセットする
 */
public void setCount(int i) {
    this.count = i;
}

/**
 * 備考をセットする
 */
public void setRemark(String str) {
    this.remark = str;
}

/**
 * 開始時刻を返す
 */
public String getStartTime() {
    String ret = this.dateFormat.format(this.startTime);
    return ret;
}

/**
 * 終了時刻を返す
 */
public String getEndTime() {
    String ret = this.dateFormat.format(this.endTime);
    return ret;
}

/**
 * 処理時間を返す
 */
public String getDiffTime() {
    return this.diffTime;
}

/**
 * ログを書き込む
 */
public void writeLog() {
    DB db = new DB();   // 自作クラスです。
                        // 詳細は関連エントリーを参照してください

    try {
        db.getConnection();
        String sql = this.writeLogSQL();
        db.excuteUpdate(sql);

    } catch (ClassNotFoundException e) {
        e.printStackTrace();

    } catch (SQLException e) {
        e.printStackTrace();
    }
}

/**
 * ログを書き込む SQL
 */
private String writeLogSQL() {
    String sql = "INSERT INTO logtbl("
        + "start_time,"
        + "end_time,"
        + "diff_time,"
        + "work,"
        + "count,"
        + "remark"
    + ")"
    + "VALUES("
        + "'" + this.dateFormat.format(this.startTime) + "',"
        + "'" + this.dateFormat.format(this.endTime) + "',"
        + "'" + this.diffTime + "',"
        + "'" + this.work + "',"
        + "'" + this.count + "',"
        + "'" + remark + "'"
    + ")";

    return sql;
}

} ||<

**参考サイト Date 型のデータをそのまま MySQL の datetime 型のフィールドに書き込もうとするとエラーとなるので,変換してあげないといけません。

今回は DateFormat クラスを使いましたが,次のサイトが分かりやすい説明をしてくれています。 -時刻の扱い方

**このエントリーのつづき -Jakarta Commons HttpClient によるSBI証券での自動売買(8) - 会社四季報の企業概要をデータベースへ格納編(マルチスレッド)

**関連エントリー -Jakarta Commons HttpClient によるSBI証券での自動売買(6) - 会社四季報の企業概要をデータベースへ格納編 -Java で 2つの時間(時刻)の差を HH:mm:ss 形式で表現する(Appache Commons Lang) Java で 2つの時間(時刻)の差を HH:mm:ss 形式で表現する(Appache Commons Lang) - 彼女からは、おいちゃんと呼ばれています -Jakarta Commons HttpClient によるSBI証券での自動売買(5) - データベース連携の準備編 -Jakarta Commons HttpClient によるSBI証券での自動売買(4) - 正規表現でデータ解析編(例外処理つき) -Jakarta Commons HttpClient によるSBI証券での自動売買(3) - 正規表現でデータ解析編 -Jakarta Commons HttpClient によるSBI証券での自動売買(2) - 会社四季報の企業概要を取込む編 -Jakarta Commons HttpClient によるSBI証券での自動売買(1) - ログイン編 Jakarta Commons HttpClient によるSBI証券での自動売買(1) - ログイン編 - 彼女からは、おいちゃんと呼ばれています