JavaDB(Apache Derby)のコンソールツールであるijのメモ。
(OracleでいうSQL*Plusのようなもの)
JDK1.6.0(_02より前)の場合、以下のようにして起動する。[2009-02-22]
> set DERBY_HOME=C:\Program Files\Java\jdk1.6.0\db
> path=%PATH%;%DERBY_HOME%\frameworks\embedded\bin
> ij.bat
ij バージョン 10.2
もうひとつ、%DERBY_HOME%\frameworks\NetworkServer\binにもij.batは存在しているが、こちらはネットワーク経由でJavaDBサーバーへ接続する為に使う
。
(組込環境用のij.batでは、サーバーに接続できない)
> cd %DERBY_HOME%\frameworks\NetworkServer\bin > ij.bat ij バージョン 10.2
JDK1.6.0_02以降の場合、以下のようにして起動する。[2009-04-23]
(環境変数DERBY_HOMEを設定する必要が無い)
> path=%PATH%;C:\Program Files\Sun\JavaDB\bin
> ij.bat
ij バージョン 10.4
※バージョン10.2では接続URLに単なるディレクトリー名(パス名)を指定するだけで接続できたが、10.4はちゃんとプロトコル「jdbc:derby:」を付けないとダメなようだ。
※バージョン10.4では同一のディレクトリー内に組込環境用とクライアントサーバー用のライブラリーが揃っているので、接続URL次第でどちらにもアクセスできる。
ijでは、コマンド(SQL)の末尾に必ずセミコロン「;
」が必要。
helpコマンドでコマンド一覧が見られる。
ij> help;
exitコマンドでijを終了する。
ij> exit;
コマンド | 説明 | 備考 |
---|---|---|
connect | DBに接続する。 | |
disconnect | DBから切断する。 | |
autocommit | 自動コミットの有無を切り替える。 | デフォルトは自動コミットされる。 |
commit | コミットする。 | |
rollback | ロールバックする。 | |
show schemas | スキーマ一覧を表示する。 | |
show tables | テーブル一覧を表示する。 | 「show tables in APP; 」でAPPスキーマのテーブルのみ表示する。 |
show views | ビュー一覧を表示する。 | |
show indexes | インデックス一覧を表示する。 項目名も表示される。 |
「show indexes from TEST; 」でTESTテーブルのインデックスが表示される。 |
describe | テーブルの定義を表示する。 | 「describe TEST; 」でTESTテーブルの定義が表示される。 |
コマンドは省略できない(例えばconnやdescはダメ)ので、不便だ…。
> ij.bat
ij バージョン 10.4
ij> help; ←ヘルプ:コマンド一覧を表示する
〜
ij> connect 'jdbc:derby:C:\temp\javadb\sample1'; ←JavaDBに接続する
ij> show tables in APP; ←テーブル一覧を表示する
TABLE_SCHEM |TABLE_NAME |REMARKS
------------------------------------------------------------------------
APP |TEST |
1 行が選択されました
ij> describe test; ←テーブルの定義を表示する
COLUMN_NAME |TYPE_NAME|DEC&|NUM&|COLUM&|COLUMN_DEF|CHAR_OCTE&|IS_NULL&
------------------------------------------------------------------------------
ID |CHAR |NULL|NULL|4 |NULL |8 |NO
NAME |VARCHAR |NULL|NULL|10 |NULL |20 |YES
2 行が選択されました
ij> select * from test; ←SQLの実行
ID |NAME
----------------
0 行が選択されました
ij> exit; ←ij.batを終了する
DBへの接続にはconnectコマンドを使う。
接続方法 | コマンドの例 | 10.2 | 10.4 | 備考 | |
---|---|---|---|---|---|
embedded | NetworkServer | ||||
組込環境 | connect 'C:\temp\javadb\sample1'; |
○ | ○ | エラー 08001 | |
connect 'jdbc:derby:C:\temp\javadb\sample1'; |
○ | エラー 08001 | ○ | ||
クライアント/サーバー環境 (ネットワーク接続) |
connect 'jdbc:derby://localhost/C:\temp\javadb\sample1'; |
エラー 08001 | ○ | ○ |
例 | 内容 | ||
---|---|---|---|
08001 | エラー 08001: No suitable driver found for C:\temp\javadb\sample1 | ドライバーが見つからない。 接続URLが間違っている(解釈できない)。 ※組込環境で接続しようとした場合、組込環境用のドライバー(derby.jar)が必要。 ※ネットワーク接続しようとした場合、ネットワーク用のドライバー(derbyclient.jar)が必要。 |
|
エラー 08001: java.net.ConnectException : Error connecting to server localhost on port 1527 with message Connection refused: connect. | 10.2 | (ネットワーク接続しようとした場合) ネットワークサーバーが見つからない(起動していない)。 |
|
エラー 08001: java.net.ConnectException: ポート 1527 のサーバー localhost への接続中にメッセージ Connection refused: connect でエラーになりました。 | 10.4 | ||
XJ004 | エラー XJ004: データベース 'C:\temp\javadb\sample2' が見つかりません。 | DBが存在していない。 | |
XJ040 XSDB6 |
エラー XJ040: データベース 'C:/temp/javadb/sample1'
を始動できません。詳しくは、次の例外を参照してください。 エラー XSDB6: Derby の別のインスタンスがすでにデータベース C:\temp\javadb\sample1 をブートしている可能性があります。 |
(組込環境で接続する場合、他のツールが接続していると接続できない) 他のツールがそのDBに接続している。あるいは接続した後、終了(シャットダウン)していない。 ネットワークサーバーを起動して接続した場合、接続したツールを終了しても、そのネットワークサーバーが稼動していると組込環境で接続できない。 |
コネクションを切断する場合はdisconnectコマンドを使う。
ij> disconnect;
DBをシャットダウンする場合はconnectコマンドを使う。
ij> connect 'jdbc:derby:C:\temp\javadb\sample1;shutdown=true';
エラー 08006: データベース 'C:\temp\javadb\sample1' がシャットダウンされました。
ijでは、デフォルトはオートコミットになっている(更新系のSQLを実行すると、自動的にコミットされる)ようだ。
オートコミットするかどうか切り替えるには、autocommitコマンドを使う。
ij> autocommit off; ij> autocommit on;
自動コミットをオフにした場合、明示的にコミットする必要がある。
ij> commit; ij> rollback;
自動コミットがオフの場合、ijを(exitコマンドやCtrl+Cによって)終了させるとロールバックされる。
(組込環境で接続している場合は他のツールから同一DBに接続できないから関係ないが、)
ネットワーク接続していて自動コミットをオフにしている場合、更新系SQLを実行すると、レコードロックがかかるようだ。
そして、コミットまたはロールバックするまで、他のツールからの接続では(そのレコードに関する)単なるSELECTすら一時停止する!
(select 〜 for updateという構文はあるようだが、役に立っていないような?)