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

かんたん!derbyでJDBC入門1(コネクションを取得する)

はじめに

新人研修でJDBCをやったことがある人は多いと思います。私も例に漏れずJDBCをやりました。やったはずなのですが、いざ自分一人で家でやってみると、MySQLをインストールしたりドライバをダウンロードして設定したりと、意外と時間がかかりました。

最近、jdkにあらかじめ入っているderbyを使って簡単にJDBCを利用するプログラムを書く方法を知ったので紹介します。 また、JDBCを利用するプログラムを書いていて疑問に感じた点を「さいごに」に残します。

前提

  • Eclipse4
  • Java8

さっそくコーディング

下のようにコーディングして、実行してみます。

package test;

import java.sql.Connection;
import java.sql.DriverManager;

public class TestDatabaseConnection {
    public static void main(String[] args) throws Exception {
        
        // JDBC4.0から不要になった。「さいごに」参照。
//     Class.forName("org.apache.derby.jdbc.AutoloadedDriver");
        
        // URL(jdbc:derby:zoo;create=true)については「さいごに」参照。create=trueはなかったら作るということ。
        try (Connection conn = DriverManager.getConnection("jdbc:derby:zoo;create=true")) {
            // データベースを利用する処理
        }
    }
}

失敗しました。

Exception in thread "main" java.sql.SQLException: No suitable driver found for jdbc:derby:zoo
    at java.sql.DriverManager.getConnection(DriverManager.java:689)
    at java.sql.DriverManager.getConnection(DriverManager.java:270)
    at test.TestDatabaseConnection.main(TestDatabaseConnection.java:9)

Driverがないと言われてしまいました。 Driverの実装クラスはderby.jarに入っているので、derby.jarをクラスパスに追加します。

derby.jarをクラスパスに設定する。

ここでは、derby.jarをクラスパスに設定します。 derby.jarは、idkにあらかじめ入っているJavaDBを利用するためのJDBCの実装クラスを提供するJARです。 idkにあらかじめ入っているので、データベースをインストールしてドライバのダウンロードして…といった作業が不要です。 ちょっとJDBCの練習をしたいというときに便利だと思います。

プロジェクトを右クリック→ビルドパス→外部アーカイブの追加 で、derby.jarを選択します。

f:id:machoblog:20161217135023p:plain

derby.jarは 【idkのインストールディレクトリ】/Contents/Home/db/lib にあります。

f:id:machoblog:20161217135242p:plain

再び実行

再び実行すると上手くいきます

さいごに

仕事ではJDBCを使う機会はあまりないと思いますが、資格の勉強等でJDBCのサンプルコードを動かしてみたいと思ったときにここで説明した方法が役に立つと思います。 以下、コーディング中に気になったことを残します。

【補足】Class.forName(“java.sql.Driverの実装クラス名”)がJDBC4.0から不要になった

/META-INF/services/java.sql.Driverというファイルに実装クラスが定義されることになったため、Class.forNameでjava.sql.Driverの実装クラスを読み込む必要がなくなりました。

derby.jarを展開したものの中身

f:id:machoblog:20161217141307p:plain

java.sql.Driver

org.apache.derby.jdbc.AutoLoadedDriver

【補足】Connectionを取得する時のURL

Connectionを取得するときのURLの構成について説明します。

プロトコル(jdbc固定)】:【製品名】:【データベース固有の値】

jdbc:derby:zoo

【製品名】は、たとえばMySQLでは"mysql"となり、製品ごとに異なります。

【データベース固有の値】には"localhost:3360:mydb"のように{ホスト名}:{ポート}:{データベース名}となることもあります。

以上です。