seraphyの日記

日記というよりは過去を振り返るときのための単なる備忘録

Squirrel SQL ClientをApache Derby(JavaDB)のフロントエンドに使ってみる

Apache DerbyにはGUIの管理ツールが標準では存在しない。


コンソール画面での対話ツールである「ij」で一通りデータベースの管理はできる。
これは、OracleでいうところのSQL*Plusみたいなものである。


DDLのようなものは、たとえばERツールで生成するなどしてファイルにするであろうから、あとは、これをijから「run」コマンドで実行すればよい。
この程度であれば、特にGUI画面でなければならない、ということもない。


しかし、DML文、とくに複数のテーブルを結合するようなクエリを書く場合には、さすがにテーブルの列名を一覧しつつSQL文を編集できるGUIツールが欲しくなる。
こうゆうGUI的なツールがないと生産効率が悪すぎてやってられない。

何故、Squirrel SQL Clientなのか?

この日記でもたびたびderbyをデータベースに使った各種ライブラリの使用方法などのメモを書いてきたのだが、いま日記の記事一覧を確認してみるが、derby自身のGUIツールについてのメモは残してなかった。


NetBeansEclipseIDEからも最低限のテーブルへの参照などは可能であるし、ijを基本に、その時々のツールで急場をしのいでいたような気がする。


今回、あらためて、なにか良いGUIツールが無いかと考えたとき、当初思いついたのは、Oracleの出しているSQL Developerであった。


SQL Developerなら、JDBC接続だし、JDBCでもなんでもないMicrosoft AccessMDBも接続できたり、MySQLSQLServerとの接続用のアドインも提供されているぐらいだから、Apache Derbyも使えるんじゃ無いかと思って試してみたのだけれど…。
実際にはApache Derby用のアドインは存在せず、また、JDBCのURLをDerbyに書き換えて接続を試してみても、うまく行かない。
どうやら現在のSQL Developer 3ではDerbyにつなぐことは無理っぽい。


(ネットの検索によると昔は任意のJDBC接続できたような記述も見受けられるが、よくわからない。ヘルプにもJDBC接続という記述があるが現在は存在せず。ダメもとで、Oracle接続のコネクションを作成し、それをAdvancedに切り替えてURLをDerby用に編集したりしてみたが、やはり、うまくドライバをロードしてくれない。ドライバ自体はSQL Developerの設定で追加することは可能なようであるのだが…。)


そこで改めて調べてみたところ、Apache Derby用のGUIツールとしては、「Squirrel SQL Client」を使うと良いらしいことがわかった。
Derbyの公式ページで、このツールが紹介されているのである。*1
http://db.apache.org/derby/integrate/SQuirreL_Derby.html

Squirrel SQL Clientのインストール方法

このツールの配布サイトは以下にある。
http://www.squirrelsql.org/#installation


一応、このツールはDerby専用というわけではなく、JDBCドライバで接続できる各種データベースに対応している。


このツールは、Javaで記述されているが、IzPack を使ったインストーラ形式で配布されており、Windows/Linux用と、Mac OS X用とがある。(オープンソース(GPL)なのでソース一式や、インストーラではないプレーンなzip形式も配布されている。)


安定版が、以下のsourceforge.netのページからダウンロードできる。
http://sourceforge.net/projects/squirrel-sql/files/1-stable/

(今回は、安定板のほかに最新版の20120711版も使ってみた。スクリーンキャプチャは最新版であるが、基本的には安定板と大きな差異はなさそう。)


インストーラなので起動して順に答えていけば良いが、
プラグインを指定するところで「derby」を指定し、*2


また「日本語訳」も指定しておくこと。
(あまり日本語化されないので期待しすぎないように。)

インストールされたら、「Squirrel SQL Client」を起動する。

初回起動直後にはJDBCドライバの設定がなにもされていないので、なにも動かない。


以下のようにDerbyのドライバを設定する。



derbyのJDBCドライバの場所を指定する。
embeddedモードの場合は、derby.jarだけで良い。
日本語リソースを使う場合には、追加でderbyLocale_ja_JP.jarも指定する。



組み込みモードでの利用は以上の設定で良い。
もしサーバーモードでDerbyを動作させ、それにクライアントとして接続させるのであれば、ドライバとして「derbyclient.jar」も追加する必要がある。



他のJDBCドライバを設定する必要がなければ、ここで「ロード済みドライバのみ表示する」を選択してドライバ一覧の表示をすっきりさせておく。



次に、ドライバの設定が完了したら接続先の設定を行う。
Aliasタブをクリックし、「+」アイコンを押下してエイリアスの追加ダイアログを表示する。


JDBCの接続URLを設定する。
derbyの組み込みモードであれば

jdbc:derby:/Users/seraphy/db.derby;create=true

のようなURLとなる。

Apache-Derbyの組み込みモードではユーザーやスキーマは意味を持たないが、ネットワークモードで接続した場合には暗黙で「APP」ユーザとなるため、ここでも「APP」を指定する。
また、パスワードも「APP」とするのが通例である。


これで接続してみる。


データベースに接続されると以下のような画面となる。
これは「オブジェクトツリーワークシート」と呼ばれるものである。


JDBCのメタ情報から取得されるデータベースの各種情報などが確認できる。
また、プロシージャやユーザー定義型も確認できる点も良い。


オブジェクトツリーワークシートのSQLタブに切り替えるか、あるいは「セッション」メニューの「新規SQLワークシート」でタブを追加することで、SQLの編集画面を開く事ができる。

Squirrel SQL ClientでDDLを発行してみる

DDL文を作成し実行してみる。



SQL文を入力し、ランナーのアイコンで実行となる。
オブジェクトツリーで、作成されたテーブルの情報を確認できる。


Squirrel SQL ClientでDMLを入力してクエリ結果を確認してみる。

SQLワークシートにDML文でデータを入れてみる。

デフォルトではオートコミットが有効になっている。
オートコミットをOffにして手動でコミットもしくはロールバックするように設定することもできる。

クエリを実行すると、見やすい表形式で確認できる。

セルエディタでテーブルを変更してみる。

データの更新方法はSQLワークシートでDML文を実行するだけではない。
Squirrel SQL Client では、GUIエディタらしく、セルエディタでテーブルの値を直接変更することもできる。

テーブルの「Contents」タブから、「Make Editable」を選択。
すると、セルが編集可能になる。

複数行の入力や、データのファイルからの読み書きも可能である。

Derbyの実行計画を確認してみる。(2013/8/1追記)

システムプロシージャを呼ぶことで任意のタイミングでの実行計画と統計情報を取得できる。

たとえば、以下のように使用する。

-- 実行計画・統計情報の取得開始
CALL SYSCS_UTIL.SYSCS_SET_RUNTIMESTATISTICS(1);

-- SQLの実行
SELECT A.IDX
     , A.VAL
     , B.IDX
     , B.REFIDX
     , B.VAL
  FROM TBL1 A
 INNER JOIN
       TBL2 B
    ON A.IDX = B.REFIDX
 WHERE A.IDX IN (1, 3, 5)
 ORDER BY
       A.IDX
     , B.IDX;

-- 実行計画・統計情報取得終了
CALL SYSCS_UTIL.SYSCS_SET_RUNTIMESTATISTICS(0);

-- 取得された実行計画・統計情報の表示
VALUES SYSCS_UTIL.SYSCS_GET_RUNTIMESTATISTICS();
実行例

結論

Squirrel SQL Clientはシンプルそうに見えて、いろいろオプションやらボタンがついていて、思ったよりも高機能である。

とりあえず、Squirrel SQL Clientがあれば、Apache Derbyのメンテナンスでは、たいていのことは出来るようになる。
他のツールを試してみる必要もなさそうである。

Apache Derbyの公式ページで紹介されているぐらいなので、たぶん、これ一本で、たいていの作業はこなせるのだろう。

Derbyを使うなら、とりあえず覚えておいて損はないようだ。

*1:Squirrelとはリスさんのこと。発音もスペルも大変難しい。http://ejje.weblio.jp/content/squirrel

*2:このアプリにJDBCドライバが同梱されているわけではないので、それは別途用意する必要がある。