Javaでデータベースに繋ぐ(その1) たぶん基本のやりかた for MySQL/MariaDB


「その1」からちょっとだけ書き換えればOK!

その1」だとDerbyを使うため、あまりメジャーとは言えません。
ということでMySQLだったらどうなるのでしょうか? ほとんど差はありません。

実際にコードを少しだけ書き換えてみます。
実行環境は、CentOS7でのMariaDB導入 簡易ガイドで作成しているHOGEDB(ユーザーhogeで接続)としています。

書き換えたのは2箇所だけ、わかるでしょうか?

/**
 * データベース接続のサンプル(その1: Statement方式) MySQL版
 * 
 * @author Sato Daisuke
 */

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class Sample1forMySQL {
    public static void main(String[] args) throws SQLException {
        // (1) 接続用のURIを用意する(必要に応じて認証指示user/passwordを付ける)
        String uri = "jdbc:mysql://localhost/HOGEDB?user=hoge&password=hogehoge";

        // (2) DriverManagerクラスのメソッドで接続する
        Connection conn = DriverManager.getConnection(uri);

        // (3) SQL送信用インスタンスの作成
        Statement st = conn.createStatement();

        // (4) SQL送信
        st.executeUpdate("drop table if exists sample");
        st.executeUpdate("create table sample(id integer primary key)");
        Long start = System.currentTimeMillis();
        Long delta = start;

        // とりあえず5万回のループ
        for (int i = 0; i < 10000; i++) {
            st.executeUpdate("insert into sample values(" + i + ")");

            // スプリットの計算
            if (i % 1000 == 0) {
                Long now = System.currentTimeMillis();
                Long split = now - delta;
                System.out.println("" + i + ": " + split + "ms.");
                delta = now;
            }
        }
        Long end = System.currentTimeMillis();
        System.out.println("所要時間: " + (end - start) + "ms.");

        // (5) 後始末(インスタンスの正常クローズ)
        st.close();
        conn.close();
    }

}

書き換えた2ヶ所は、

  • DBの接続文字列(uri)をMySQL向けに変更してます
  • Derby版はメモリDBを使ったため、実行すると毎回初期化される仕組みになってますが、こちらはディスク上に入れてしまっているので、「もしあったら先にDROPする」コードをいれました(create table文の直前)。

実行の際の注意

当たり前ですが、MySQLのコネクターがないとエラーが出ます。
ダウンロードページから入手し、展開しておいてから、ライブラリー化しておくといいでしょう。