S-JIS[2009-12-25] 変更履歴

JavaDB ijメモ

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はダメ)ので、不便だ…。


コマンド・SQLの入力例

> 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';
connect 'C:/temp/javadb/sample1';
エラー 08001  
connect 'jdbc:derby:C:\temp\javadb\sample1';
connect 'jdbc:derby:C:/temp/javadb/sample1';
エラー 08001  
クライアント/サーバー環境
(ネットワーク接続)
connect 'jdbc:derby://localhost/C:\temp\javadb\sample1';
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という構文はあるようだが、役に立っていないような?)


JavaDBへ戻る / Java目次へ戻る
メールの送信先:ひしだま