DB: 2008年4月アーカイブ

そんな最近の話じゃないんだけど、JDK6にはJavaで作られているRDBMSであるDerbyがデフォルトで組み込まれている。
※JavaDBという表記になっていることもある。
http://db.apache.org/derby/

JDKデフォルトかつ約2Mという軽量構成なので使い道もいろいろあるんだろうけど、筆者が使ってみようかなと思ったのはプロトタイプ開発のときとかにサクッと使えるイメージがあったからだ。

とにかく使ってみないとよくわからないので、とりあえず使ってみる。
で、IDEが大好きな筆者は当然Elipseと絡ませて使っていく。
※ちなみにJDK6をインストールすると、なぜかDerbyだけはデフォルトでC:\Program Files\Sun\JavaDBにインストールされた。

まずDerbyのEclipseプラグインをダウンロード。
http://db.apache.org/derby/derby_downloads.html#How+to+build+Derby

なぜか、2008/04/29時点の最新版である10.4.1.3 Releaseのcoreプラグインがリンク切れしていたので、一個まえのやつを使った。
derby_core_plugin_10.3.2.599110.zip
derby_ui_plugin_1.1.1.zip

この2つをEclipseのインストールフォルダに解凍。で、Eclipse起動。起動してたら再起動。
これで準備完了。

適当なプロジェクトを作って、プロジェクトルートを右クリックすると「Apache Derby」というのがコンテキストに現れる。
で、「Start Derby Network Server」をクリック。すると以下のメッセージが表示され起動する。
===============
DRDA_SecurityInstalled.I
Apache Derby Network Server - 2008-04-29 04:52:45.812 GMT に 10.3.2.1 - (599110) が開始され、ポート 1527 で接続を受け入れる準備ができました。
===============

で、次はApache Derby>ij(Interactive SQL)をクリック
SQL入力のプロンプトがコンソールに表示される。

ij> connect 'jdbc:derby://localhost/db;create=true';

と入力すると音もなくDBが作成されて、かつそのDBに接続される。
localhostの次に書いてある「db」は任意の値でこれがDB名となる。
作成が完了すると、DB名のフォルダ(この場合「db」)がプロジェクトルート直下に作成される。
この下はデータファイルとかが格納されるっぽいく、基本的にはいじらないっぽい。

2回目からは
ij> connect 'jdbc:derby://localhost/db;create=true';
でも
ij> connect 'jdbc:derby://localhost/db;create=false';
でも
ij> connect 'jdbc:derby://localhost/db;';
でもいい。※create=trueはなかったときだけ作る

ここまでで、適当なDBを作ってみた人向けに先にお知らせ。
drop database的なものはないので、DB落とすときはフォルダをガッと消してください。
※Eclipse起動してると消えないかも
ということは、フォルダごとコピーとればとりあえずバックアップってことになる。

その辺のこととか、細かいことはここに書いてある。
http://db.apache.org/derby/docs/dev/devguide/

で、とりあえずパッとでてくるSQLを打ってみる

==========
ij> show tables;
TABLE_SCHEM |TABLE_NAME |REMARKS
------------------------------------------------------------------------
SYS |SYSALIASES |
SYS |SYSCHECKS |
SYS |SYSCOLPERMS |
SYS |SYSCOLUMNS |
~中略~
SYS |SYSTABLES |
SYS |SYSTRIGGERS |
SYS |SYSVIEWS |
SYSIBM |SYSDUMMY1 |

19 rows selected
==========

SYS系のテーブルがズラーっとでてくる。
最後のSYSDUMMYはスキーマがSYSIBMになっているのは、Derbyは元々IBMからapacheに寄贈された経緯があるから。

この辺のテーブルは操作しようとしても、見つからないって言われる。
==========
ij> select * from sysdummy1;
ERROR 42X05: Table/View 'SYSDUMMY1' does not exist.
==========

だったら出すなよ気になるじゃん。と思うけど、まあいいや。
追記:デフォルトだとAPPユーザー扱いになるから、sysdummy1だと見えないんですね。。select * from sysibm.sysdummy1;で見えます。。

テーブルを作ってみよう。
===========
ij> create table test (a integer, b varchar(255));
0 rows inserted/updated/deleted

ij> show tables;
TABLE_SCHEM |TABLE_NAME |REMARKS
------------------------------------------------------------------------
SYS |SYSALIASES |
SYS |SYSCHECKS |
SYSIBM |SYSDUMMY1 |
APP |TEST |

20 rows selected
===========
1個追加された。
スキーマがAPPとなっているが、デフォルトはAPPが割り当てられる。
と、ここでユーザー認証とかどうなってんだ?ということに気づいた。今回の目的からすると、まあ、どうでもいいんだけど、一応調べた。
そしたら、認証以外でも非常に参考になるサイトを見つけたので後はこちらをご覧ください。
http://www.oklab.org/derby.xhtml


追記:
Derbyのドキュメントについて、日本語verがあった
http://db.apache.org/derby/docs/dev/ja_JP/getstart/
が英語のそれと比べて量が全然違います。

けっこうこういう日本語版があるけど英語版と情報量が違うのってよくあることなんで、なるべく英語のほうを見ることをお勧めします。
余計なお世話かも知れないですが、こんな感じで日英両方あったらなるべく英語のほう見てわからなければ日本語みる、みたいなことをやると英語のトレーニングになるし、情報量の違いにも気づきやすくなるし、いいと思います。
ITは米国先導なので情報もあちらの方がたくさんあります。WEB検索にしても日本語じゃみつからない解法とかが英語圏に範囲を広げるとめちゃくちゃあっさり見つかることが本当によくあります。
この業界で人より早く技術を身につけようと思ったら、英語の読みができるようにしておくことは、必須といわないまでも非常に有効な手段だと思います。逆に言えば、英語をかわしながら技術を身につけていくのは、光の玉なしでゾーマに臨むようなもんだと思ってます。
ということでLet's try!

このアーカイブについて

このページには、2008年4月以降に書かれたブログ記事のうちDBカテゴリに属しているものが含まれています。

次のアーカイブはDB: 2008年5月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。