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) -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) - ログイン編