JDK付属のDerbyを試して見る

「スッキリわかるJava入門 実践編」の第9章「データベースアクセス」には、Apache DerbyはJava 6から標準添付されていると記載されていたので、実際に試して見た。

PATH環境変数の設定

現在、PCにインストールされているのはJava 8で、以下のフォルダにインストールされている。

JDKインストールフォルダ
C:\Program Files\Java\jdk1.8.0_05
JREインストールフォルダ
C:\Program Files\Java\jre1.8.0_20

JDKのインストールフォルダを確認すると、以下のフォルダが存在するのが分かる。

Derbyフォルダ
C:\Program Files\Java\jdk1.8.0_05\db

先ずはコマンドプロンプトでDerbyのコマンドを実行しやすいように、PATH環境変数に以下のパスを追加する。

Derbyコマンドフォルダ
C:\Program Files\Java\jdk1.8.0_05\db\bin

初期設定の確認

コマンドプロンプトを開いて、以下のコマンドを実行する。
なお、カレントディレクトリは「C:\work」としたので、予め同フォルダが存在しているものとする。

C:\work> sysinfo
------------------ Java情報 ------------------
Javaバージョン:    1.8.0_20
Javaベンダー:     Oracle Corporation
Javaホーム:       C:\Program Files\Java\jre1.8.0_20
Javaクラスパス:    C:\Program Files\Java\jdk1.8.0_05\db\bin\../lib/derby.jar;C:\Program Files\Java\jdk1.8.0_05\db\bin\../lib/derbynet.jar;C:\Program Files\Java\jdk1.8.0_05\db\bin\../lib/derbyclient.jar;C:\Program Files\Java\jdk1.8.0_05\db\bin\../lib/derbytools.jar
OS名:           Windows 7
OSアーキテクチャ: amd64
OSバージョン:     6.1
Javaユーザー名:    pochi
Javaユーザー・ホーム: C:\Users\pochi
Javaユーザー・ディレクトリ:   C:\work
java.specification.name: Java Platform API Specification
java.specification.version: 1.8
java.runtime.version: 1.8.0_20-b26
--------- Derby情報 --------
[C:\Program Files\Java\jdk1.8.0_05\db\lib\derby.jar] 10.10.1.3 - (1557168)
[C:\Program Files\Java\jdk1.8.0_05\db\lib\derbytools.jar] 10.10.1.3 - (1557168)
[C:\Program Files\Java\jdk1.8.0_05\db\lib\derbynet.jar] 10.10.1.3 - (1557168)
[C:\Program Files\Java\jdk1.8.0_05\db\lib\derbyclient.jar] 10.10.1.3 - (1557168)
------------------------------------------------------
----------------- ロケール情報 ----------------
現行ロケール:  [日本語/日本 [ja_JP]]
ロケールのサポートが見つかりました: [cs]
	 バージョン: 10.10.1.3 - (1557168)
ロケールのサポートが見つかりました: [de_DE]
	 バージョン: 10.10.1.3 - (1557168)
ロケールのサポートが見つかりました: [es]
	 バージョン: 10.10.1.3 - (1557168)
ロケールのサポートが見つかりました: [fr]
	 バージョン: 10.10.1.3 - (1557168)
ロケールのサポートが見つかりました: [hu]
	 バージョン: 10.10.1.3 - (1557168)
ロケールのサポートが見つかりました: [it]
	 バージョン: 10.10.1.3 - (1557168)
ロケールのサポートが見つかりました: [ja_JP]
	 バージョン: 10.10.1.3 - (1557168)
ロケールのサポートが見つかりました: [ko_KR]
	 バージョン: 10.10.1.3 - (1557168)
ロケールのサポートが見つかりました: [pl]
	 バージョン: 10.10.1.3 - (1557168)
ロケールのサポートが見つかりました: [pt_BR]
	 バージョン: 10.10.1.3 - (1557168)
ロケールのサポートが見つかりました: [ru]
	 バージョン: 10.10.1.3 - (1557168)
ロケールのサポートが見つかりました: [zh_CN]
	 バージョン: 10.10.1.3 - (1557168)
ロケールのサポートが見つかりました: [zh_TW]
	 バージョン: 10.10.1.3 - (1557168)
------------------------------------------------------

PHPのと混同する名前のコマンドで紛らわしいが、とにかく、JavaとDerbyの情報が表示される。

チュートリアル

以下のサイトに記載の手順にしたがってチュートリアルを実行して見る。

Derbyチュートリアル Step 2
http://db.apache.org/derby/papers/DerbyTut/ij_intro.html
[Create a database]
C:\work>ij
ijバージョン10.10
ij> connect 'jdbc:derby:MyDbTest;create=true';
ij> exit;
C:\work>type derby.log
----------------------------------------------------------------
Mon Sep 15 12:52:01 JST 2014:
DerbyバージョンThe Apache Software Foundation - Apache Derby - 10.10.1.3 - (1557168): インスタンスa816c00e-0148-7770-4ce1-000006e860f8を
file:/C:/Program%20Files/Java/jdk1.8.0_05/db/lib/derby.jarからロードされたクラス・ローダーsun.misc.Launcher$AppClassLoader@66d3c617により
データベース・ディレクトリC:\work\MyDbTest上でブートしています
java.vendor=Oracle Corporation
java.runtime.version=1.8.0_20-b26
user.dir=C:\work
os.name=Windows 7
os.arch=amd64
os.version=6.1
derby.system.home=null
データベース・クラス・ローダーが開始されました - derby.database.classpath=''
----------------------------------------------------------------
Mon Sep 15 12:52:08 JST 2014: Derbyエンジンを停止しています
----------------------------------------------------------------
Mon Sep 15 12:52:08 JST 2014:
クラス・ローダーsun.misc.Launcher$AppClassLoader@66d3c617を持つデータベース・ディレクトリC:\work\MyDbTestのインスタンスa816c00e-0148-7770-4ce1-000006e860f8を停止しています
----------------------------------------------------------------

上記の通り、「C:\work\MyDbTest」にデータベースフォルダが作成され、その下に各種データベースファイルが保存されていることが確認できる。

[Connect to a database]
C:\work>ij
ijバージョン10.10
ij> connect 'jdbc:derby:MyDbTest';
[Execute SQL statements]
ij> create table derbyDB(num int, addr varchar(40));
0行が挿入/更新/削除されました
ij> insert into derbyDB values (1956,'Webster St.');
1行が挿入/更新/削除されました
ij> insert into derbyDB values (1910,'Union St.');
1行が挿入/更新/削除されました
ij> update derbyDB set num=180, addr='Grand Ave.' where num=1956;
1行が挿入/更新/削除されました
ij> select * from derbyDb;
NUM        |ADDR
----------------------------------------------------
180        |Grand Ave.
1910       |Union St.

2行が選択されました
[Disconnect from a database]
ij> disconnect;
[Exit]
ij> exit;
C:\work>
[Run SQL Scripts]

予め、以下のSQLファイルを作成する。

ファイル名
my_file.sql
connect 'jdbc:derby:MyDbTest';
create table OpenDB(name varchar(20),url varchar(50));
insert into OpenDB values ('MySQL', 'http://www.mysql.com');
insert into OpenDB values ('PostgreSQL', 'http://www.postgresql.org');
insert into OpenDB values ('sqlite', 'http://www.sqlite.org');
insert into OpenDB values ('Apache Derby', 'http://db.apache.org/derby');
select * from OpenDB;
disconnect;

以下のrunコマンドを実行すると、

C:\work>ij
ijバージョン10.10
ij> run 'my_file.sql';

想定通り、手入力と同様にSQLコマンドが実行される。

ij> connect 'jdbc:derby:MyDbTest';
ij> create table OpenDB(name varchar(20),url varchar(50));
0行が挿入/更新/削除されました
ij> insert into OpenDB values ('MySQL', 'http://www.mysql.com');
1行が挿入/更新/削除されました
ij> insert into OpenDB values ('PostgreSQL', 'http://www.postgresql.org');
1行が挿入/更新/削除されました
ij> insert into OpenDB values ('sqlite', 'http://www.sqlite.org');
1行が挿入/更新/削除されました
ij> insert into OpenDB values ('Apache Derby', 'http://db.apache.org/derby');
1行が挿入/更新/削除されました
ij> select * from OpenDB;
NAME                |URL
-----------------------------------------------------------------------
MySQL               |http://www.mysql.com
PostgreSQL          |http://www.postgresql.org
sqlite              |http://www.sqlite.org
Apache Derby        |http://db.apache.org/derby

4行が選択されました
ij> disconnect;

終わりに

「スッキリわかるJava入門」には章末に練習問題が掲載されているが、第9章「データベースアクセス」の練習問題は予めテーブルが作成されていることが前提の問題だったので、他のDBMSと同様にSQLコマンドを実行するコマンドを使用して、練習問題で必要となるテーブルを作成しようと考えた。
コマンドの命名がイマイチだが、とにかく、ツールが揃っていて良かった。