読者です 読者をやめる 読者になる 読者になる

彼女からは、おいちゃんと呼ばれています

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

Jakarta Commons HttpClient によるSBI証券での自動売買(5) - データベース連携の準備編

自動売買 Java


以前書いた件のつづきです。

次回は,取得したデータをデータベース(MySQL)に格納する処理を書こうかなと思います(JDBC


今回は,これまでに取得した情報(会社四季報の企業概要データ)を JDBC ドライバを使ってデータベース(MySQL)に格納するための「準備」です。

はじめに

まずは次の項目が必要となりますが,このあたりは情報が溢れてますので割愛します。

  • JDBC ドライバのダウンロード
  • JDBC ドライバの Jar ファイルへのクラス・パスの設定

データベース操作のためのクラス

データベースへの連携は,JDBCドライバを使うと便利です。今回はデータベースとして MySQL を採用しました。


次のサイトをご覧になっていただければ、データベースへの接続なり SQL の実行なりはひととおりできると思います。


ただ,SQL を実行する度に,ユーザIDとパスワードでデータベースに接続して...とかは面倒なので,データベース操作のためのクラスをあらかじめ作っておいたほうがなにかと便利です。以下,サンプルコードを書いておきますので参考にしてください。

サンプルコード

import java.sql.*;

public class DB_Sample {

    /**
     * データベースのユーザID
     */
    private final String USER_ID = "inouetakuya";

    /**
     * データベースのパスワード
     */
    private final String PASSWORD = "hogehoge";

    /**
     * JDBCドライバ
     */
    private final String DRIVER = "com.mysql.jdbc.Driver";

    /**
     * データベースのURL
     */
    private final String URL = "jdbc:mysql://localhost/sample";

    /**
     * データベースの接続
     */
    private Connection connection;

    /**
     * ステートメント
     */
    private Statement statement;

    /**
     * データベースに接続する
     *
     * @throws ClassNotFoundException
     * @throws SQLException
     */
    public void getConnection() throws ClassNotFoundException, SQLException {
        try {
            Class.forName(this.DRIVER);
            this.connection = DriverManager.getConnection(this.URL, this.USER_ID, this.PASSWORD);
            this.statement = connection.createStatement();

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

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

    /**
     * 接続をクローズする
     */
    public void close() {
        try {
            this.statement.close();
            this.connection.close();

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

        }
    }

    /**
     * SQL を実行する
     *
     * @throws SQLException
     */
    public void excuteUpdate(String sql) throws SQLException {
        try {
            this.statement.executeUpdate(sql);

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

データベース操作のためのクラスを作っておく意義

データベース操作のためのクラスを作っておく意義は 2つあります。

  1. SQLを実行する度に同じコードを書かなくて済む
  2. まとめて行う処理があるとき,データベースへの接続回数を減らせば処理が速くなる


データベースへの接続は構時間かかるので、接続回数を減らすことは特に重要です。ただ,このあたりは実際に呼び出しているところも含めて見ないとなかなかイメージが湧かないかもしれませんので,そこは次回以降に書きたいと思います。

プリペアドステートメント(PrepareStatement)

もう少し突っ込んだハナシをしますと,同じような SQL を繰り返し投げる場合などは,プリペアドステートメントをつかうと処理を速くできます。次のサイトが詳しいです。

参考書籍

MySQLJDBC のインストールや設定について,うまく検索できなかった方。次の書籍にそのあたりの情報が載ってます(ただし,全体としてはあんまり自信をもっておススメできる本ではないです。念のため)