Stew - 汎用JDBCフロントエンド

version 3.0


目次


Stewとは何ですか?

Stewは、JDBCを使った小規模なデータベースフロントエンドです。

コマンドラインのようなインターフェイスを持っていて、SQLを入力して実行したりできます。

ちょっとした処理であれば、バッチのように使用することもできます。

概要については、README_ja.txtをご覧ください。

使用上の注意

パスワードの保存方式

パスワードは、デフォルトではそのまま保存します。生のパスワードを保存したくない場合は、暗号化を利用できます。

詳しくは、使い方-接続設定を参照してください。

コネクション切断時はrollbackしない

デフォルトでは、disconnectコマンドによりコネクションを切断するとき、rollbackを発行しません。DBMSによっては、トランザクションが自動的にコミットされてしまうことがありますので注意が必要です。

「切断時に自動ロールバック」を設定すると、disconnectの際に自動的にrollbackを発行します。詳細は、接続設定を参照してください。

その他

プロジェクトサイトにて追加説明を行っていますので、あわせてご利用ください。

http://stew.sourceforge.jp/

インストール

JRE(Java実行環境)1.5以上がインストールされている必要があります。

また、利用するデータベースのJDBCドライバが必要です。

リリースパッケージを任意のディレクトリに展開します。

インストールサイズを最小限にしたい場合はリリースパッケージに含まれている"stew.jar"だけを展開してください。

起動コマンドの設定は、次の起動方法を参照してください。

起動方法

GUIモードで起動する場合は、以下のコマンドを実行します。

> java -jar stew.jar --gui

CUIモードで起動する場合は、以下のコマンドを実行します。

> java -jar stew.jar --cui

起動スクリプトもしくはショートカットやエイリアスを作成しておくと便利です。UNIX系OSの場合は"stew.sh"を、Windowsの場合は"stew.bat"を参照してください。

Stewを実行すると、".stew"ディレクトリが作成され、設定の保存に使用されます。".stew"ディレクトリは、デフォルトではカレントディレクトリに作成されます。

アンインストール

インストールしたファイルと".stew"ファイルを削除してください。


使い方

Stewを使用するには、JDBC接続が可能なデータベースと、JDBCドライバが必要です。JDBCドライバ自体の詳細については、各データベースの説明書などを参照してください。

接続設定

CUIの場合は、起動時に--editオプションを指定、またはコマンドとして--editを実行、すると、編集プログラムが起動します。

GUIの場合は、メニューの"接続設定"を実行すると、編集ダイアログが開きます。

それぞれの設定項目の説明は次のとおりです。

コネクタID
connectコマンドなどに渡すIDです。英数字のみ指定できます。
コネクタ名
プロンプトに表示される接続名です。文字制限は特にありません。
クラスパス
JDBCドライバのクラスパスを指定します。Javaの-CLASSPATHオプションと同じ形式で指定します。
ドライバ
JDBCドライバのDriver実装クラスを指定します。GUIの場合、クラスパスが指定されていれば、"ドライバの検索"から選択できます。
接続先URL
JDBCのURL(DriverManager.getConnection(url)に指定するurlと同じもの)を指定します。
ユーザ
JDBCのURLと同時に指定するユーザIDを指定します。
パスワード
ユーザIDのパスワードを指定します。
暗号化処理
パスワードの保存方法を選択します。次項"パスワードの保存について"を参照してください。
読取専用
コネクションをREADONLYに設定し、更新の有るコマンドを実行できないようにします。(コマンド側のReadOnlyに拠る。)
自動ロールバック
設定すると、切断時に自動でロールバックします。

これらの情報は、".stew/connectors.properties"に保存されます。手動で編集することもできますが、その際は注意して行ってください。

パスワードの保存について

パスワードは設定ファイルに保存されるため、そのまま保存すると都合が悪い場合があります。パスワードの保存方法は、暗号化処理を選択することができます。

PlainTextPassword
(デフォルト)パスワードをそのまま保存します。
PbePassword
PBE暗号を使用してパスワードを保存します。メニュー-暗号鍵の入力で暗号鍵を入力した後、接続設定でパスワードを入力して保存すると、暗号化された状態で保存します。次回起動時、再度暗号鍵を入力するまで、パスワードが復号できなくなります。

独自のパスワード暗号化を追加することもできます。(実装詳細:Passwordインタフェースの実装クラスを追加します。)

無名接続

接続設定なしで接続を行うことができます。ただし、ドライバ(jdbc.drivers)とクラスパスはJavaVM起動時に指定しておく必要があります。

> connect <user>/<password>@<URL>

(例)

> connect user/password1@jdbc:firebirdsql://127.0.0.1//home/argius/test.fdb

対話モード

通常の起動では、対話モードでの操作となります。

対話モードでは、コマンド入力待ち状態になった時にコマンドを入力し、処理が終わると再びコマンド入力待ちになります。

FTPコマンドのようなプログラムの操作に似ているかもしれません。

一行完結モード(One-Liner)

Stewの処理が一行の入力で完結します。"stew"コマンドを設定していると仮定すると、次のような形式で実行します。

$ stew <connector-id> <command>

実行すると、<connector-id>の接続設定で接続を開始し、その接続を使用してコマンドを実行します。コマンド実行後、接続を切断して終了します。

このモードでは、ご利用のshell環境の制約(例えば、ワイルドカード,リダイレクト など)を受けますのでご注意ください。


コマンド(Stew内部コマンド)

組み込みコマンドは、Stewから切り離すことができないコマンドです。(実装詳細:Commandクラスのサブクラスではなく、Command.invokeメソッドに直接書かれている処理です。)

それ以外は、追加コマンドとして実装されています。(実装詳細:Commandクラスのサブクラスによる処理です。)

コマンドでない文が指定された場合は、SQLとして実行されます。バインド変数のあるSQL文を使う場合は、最後に";"(セミコロン)をつけ、それ以降にカンマ区切りでパラメータを指定できます。

connect - データベースに接続する (組み込みコマンド)

> connect <connector-id>

> -c <connector-id>

予め用意した接続設定を使用して、データベースに接続します。対話モードでは、disconnectまたは強制的に切断されるまで、接続が維持されます。

すでに接続中の場合は、その接続を切断してから接続を行います。

disconnect - データベースとの接続を切断する (組み込みコマンド)

> disconnect

> -d

データベースとの接続を切断します。

接続設定でrollbackを指定している場合は、rollbackを試みます。

commit - トランザクションのコミット (組み込みコマンド)

現在のトランザクションでの変更をコミットします。

コミットする際は、誤って必要なデータを削除しないよう注意してください。

rollback - トランザクションのロールバック (組み込みコマンド)

現在のトランザクションでの変更をロールバックします。

-e - 複数コマンドの評価 (組み込みコマンド)

> -e <command> -e <command> ...

コマンドを連続して実行させます。exportなどを同時に実行する場合や、コマンドラインからの実行の場合に使います。

-f - ファイル内容をコマンドとして実行 (組み込みコマンド)

> -f <file>

ファイルの内容をコマンドとして実行します。再帰的に指定できますが、無限ループは検知できないので注意してください。

cd - カレントディレクトリの移動 (組み込みコマンド)

> cd ディレクトリ

カレントディレクトリを指定したディレクトリに移動します。

@ - 場所の表示 (組み込みコマンド)

> @

カレントディレクトリとシステムディレクトリの場所を表示します。

exit - 終了 (組み込みコマンド)

> exit

Stewを終了します。確認待ちは行いません。

load - ファイルから実行

> load [<SQLファイル> | <データファイル> <テーブル名> [ HEADER ]]

指定されたファイルを読み込んで、SQLを実行します。

パラメータが1個の場合は、ファイルをSQL文と見なして実行します。

パラメータが2個以上の場合は、ファイルをデータファイルと見なして、インポートを実行します。ファイルの拡張子によって、ファイル形式が自動的に選択されます。(実装詳細:基本的にはimportと同じ動作ですが、バッチ実行ではなく1件ずつ処理されます。)

import - ファイルのインポート

> import [<データファイル> <テーブル名> [ HEADER ]]

ファイルをデータファイルと見なして、インポートを実行します。ファイルの拡張子によって、ファイル形式が自動的に選択されます。(実装詳細:基本的には、loadのパラメータ2個以上指定した時と同じ動作ですが、Statement.addBatch()を使用します。)

一括で処理する件数をプロパティで設定することができます。

export - 検索結果のエクスポート

> export <ファイル> [ HEADER ] [command(select|find|report)]

指定したファイルに、コマンドの検索結果を出力します。ファイルの拡張子によって、ファイル形式が自動的に選択されます。

time - 実行時間計測

> time [<回数>] <SQL文>

指定したSQL文を実行し、その実行時間を計測して表示します。回数が指定された場合は、回数分SQLを繰り返し実行して、「合計」「平均」「最大」「最小」を集計します。回数を指定しない場合は、1回の実行時間を表示します。

> time select * from EMPLOYEE
実行時間 : 0.093 秒
> time 100 select * from EMPLOYEE
合計 : 0.484 秒
平均 : 0.005 秒
最大 : 0.094 秒
最小 : 0.000 秒
>

find - テーブル名検索

> find <テーブル名パターン> [<テーブル種別パターン> [<スキーマ名パターン> [<カタログ名パターン> [ FULL ]]]]

参照可能なテーブルの一覧を表示します。"パターン"というキーワードを含むパラメータは、ワイルドカード(*,?)が指定できます。

report - データベース情報表示

> report - | <テーブル名> [ PK | INDEX ]

接続中のコネクションに関する情報を表示します。

-(ハイフン)が指定された場合は、DBとJDBCドライバの名称とバージョン、接続ユーザとアドレスを表示します。

テーブル名のみが指定された場合は、テーブルの列情報が表示されます。

テーブル名とオプションが指定された場合は、PKを指定するとプライマリキーの一覧が、INDEXを指定するとインデックスキーの一覧が、それぞれ表示されます。

download - 1データごとにダウンロード

> download <ルートディレクトリ> SELECT <ダウンロードするデータの列> [, ファイルパス...]

1つの列のデータをダウンロードしてファイルに保存します。どのデータ型でも利用できます。長めのテキスト項目をまとめてダウンロードする場合などに有用です。

ファイルは、複数ファイルをダウンロードできるようにするため、データからファイル名を生成できるようになっています。ファイル名は、2列目以降の列を文字列として結合したものとなります。これはプライマリキーと拡張子を指定することを想定しています。

> download emp select FULL_NAME, JOB_COUNTRY, '/', EMP_NO, '.txt' from EMPLOYEE
ディレクトリ[./emp/USA]を作成しました。
ダウンロードされました。 (0.014 Kbytes, file=[./emp/USA/2.txt])
ダウンロードされました。 (0.012 Kbytes, file=[./emp/USA/4.txt])
 ・
 ・
 ・
ダウンロードされました。 (0.012 Kbytes, file=[./emp/USA/24.txt])
ディレクトリ[./emp/England]を作成しました。
ダウンロードされました。 (0.011 Kbytes, file=[./emp/England/28.txt])
 ・
 ・
 ・
ダウンロードされました。 (0.018 Kbytes, file=[./emp/USA/145.txt])
42 件 ヒットしました。

データが1件の場合は、データ列のみ指定すれば、ファイルパスの前半部分がそのままファイル名となります。

同名のファイルが存在したり、ディレクトリ作成時に権限が無い場合はエラーとなり、その時点で処理を中断します。

upload - ファイル内容を1データとして登録

> upload <ファイルパス> <INSERT文 or UPDATE文>

SQLのプレースホルダで指定された列にファイル内容を登録します。

wait - 待機

> wait 秒(小数第3位まで指定可)

指定された秒数、待機します。連続したコマンドを実行する場合などに使えるかもしれません。

GUIモード・メニュー

GUIモードのメニューについての説明です。

ファイル(F) - 新しいウィンドウ(N) Ctrl-N

新しいウィンドウを開きます。新しいウィンドウは、元のウィンドウとは独立した接続で処理が行われます。

ファイル(F) - 閉じる(C) Ctrl-W

ウィンドウを閉じます。コネクションが接続中の場合は、確認ダイアログを表示します。

開いているウィンドウが1つの場合は、終了(X)と同じ動作となります。

ファイル(F) - 終了(X) Ctrl-Q

アプリケーションを終了します。確認ダイアログが表示され、"はい"を選択すると終了します。

編集(E) - 切り取り(T) Ctrl-X

選択範囲をクリップボードにコピーして、選択された部分を削除します。(基本的に、一般的なアプリケーションと同じ処理です。)

編集(E) - コピー(C) Ctrl-C

選択範囲をクリップボードにコピーします。(基本的に、一般的なアプリケーションと同じ処理です。)

編集(E) - 貼り付け(P) Ctrl-V

カーソル位置にクリップボードの内容を貼り付けます。(基本的に、一般的なアプリケーションと同じ処理です。)

編集(E) - すべて選択(A) Ctrl-A

選択している領域(テーブルまたは入出力欄)を全選択状態にします。

編集(E) - 検索(F) Ctrl-F

選択している領域(テーブルまたは入出力欄)内の文字列を検索します。

テーブルはセル単位で検索します。入出力欄は、一致部分をハイライトします。

オプションで、「正規表現を使用する」「大文字と小文字を区別しない」が指定できます。

編集(E) - フォーカス切替(G) Ctrl-G

検索結果エリアと入力欄のフォーカスを入れ替えます(toggle)。

編集(E) - メッセージのクリア

入出力欄のメッセージをクリアします。

表示(V) - ステータス バー(B)

選択された場合、ウィンドウの下部にステータスバーを表示します。

設定は保存されます。

表示(V) - 列番号を表示(C)

選択された場合、検索結果の列名に番号を付けます。

表示(V) - 情報ツリーペインを表示(I)

選択された場合、データベース情報ツリーペインを表示します。

表示(V) - 常に手前に表示(T)

選択された場合、ウィンドウを常に手前に表示するようにします。

表示(V) - 最新状態に更新(R) F5

検索結果を表示した際のクエリを再発行して、最新状態を表示します。

表示(V) - 列幅を拡大(W) Ctrl-.(period)

検索結果の列幅をそれぞれ1.5倍に拡大します。

表示(V) - 列幅を縮小(N) Ctrl-,(comma)

検索結果の列幅をそれぞれ2/3に縮小します。

表示(V) - 列幅を調整(A) Ctrl-/(slash)

検索結果の列幅を自動調整します。次項の「列幅自動調整」で選択されたモードで調整されます。

表示(V) - 列幅自動調整(M)

検索結果表示時に、検索結果の列幅を自動調整するモードを選択します。

コマンド(C) - 実行(X) Ctrl-M

コマンドを実行します。入出力欄でエンターキーを押したのと同じ効果があります。

コマンド(C) - 中断(B) Ctrl-Pause(Break)

コマンドを中断します。サーバ側の処理はキャンセルされません。

コマンド(C) - 前のコマンド履歴(P) Ctrl-↑

コマンド履歴を1つ遡ります。

コマンド(C) - 次のコマンド履歴(N) Ctrl-↓

コマンド履歴を1つ進みます。

コマンド(C) - ロールバック(R)

確認ダイアログを表示し、OKを押すとロールバックを実行します。

コマンド(C) - コミット(M)

確認ダイアログを表示し、OKを押すとコミットを実行します。

コマンド(C) - 接続(C) Ctrl-E

接続リストを表示します。接続リストで接続したい接続IDを選択して"了解"を押すと、connectと同じ処理が実行されます。

コマンド(C) - 切断(D) Ctrl-D

接続を切断します。disconnectコマンドと同じです。

コマンド(M) - 暗号鍵の入力(K)

起動中のプロセスで接続設定のパスワード暗号化に使用される秘密鍵を入力します。

コマンド(M) - 接続設定(E)

接続設定ダイアログを表示します。

データ(D) - 並び替え(S) Alt-S

検索結果をファイルに出力します。exportコマンドとは独立した処理です。検索結果が表示されている場合のみ有効です。

データ(D) - インポート(I)

検索結果のテーブルにファイルをインポートします。importコマンドとは独立した処理です。検索結果が表示されている場合のみ有効です。

データ(D) - エクスポート(E) Ctrl-Shift-S

検索結果をファイルに出力します。exportコマンドとは独立した処理です。検索結果が表示されている場合のみ有効です。

ヘルプ(H) - ヘルプを表示(H)

ヘルプを表示します。現在は未実装です。

ヘルプ(H) - Stew について(A)

バージョン情報ダイアログを表示します。

GUIモード・その他

全体

テキスト入力欄は共通して、「元に戻す」「やり直す」「切り取り」「コピー」「貼り付け」「すべて選択」のショートカットが利用できます。

これらは、コンテキストメニューからも操作できます。

結果テーブル

検索コマンドを実行したときに、結果を表示します。最左列は行番号が表示されます。列幅自動調整が設定されていれば、列幅が自動的に調整されます。

セルを編集すると、テーブルに反映(UPDATE)されます。

行番号が"+"になっている行は「非リンク行」です。非リンク行については、コンテキストメニューを参照。

入出力欄

コマンドの入力とメッセージの出力が同居する、コマンドラインのようなインターフェイスです。

エンターキーを押すと、プロンプトから末尾までがコマンドとして解釈され実行されます。カーソルが末尾にない場合は、カーソルが末尾に移動します。プロンプトより前の部分は編集不可となっています。

デスクトップからファイルをドロップすると、「パスの貼り付け」「内容の貼り付け」のいずれかが実行できます。

ステータスバー

直前のコマンドとその実行時間が表示されます。実行時間は、timeコマンドとは異なり、コマンドの開始から終了までの所要時間となります。

コンテキストメニュー

マウスの右クリックにより、そのコントロールに即した機能のメニューが表示されます。表示されるメニュー内容は、入力部分ごとに異なります。

メニューは以下のとおりです。

ソート
クリックした列(選択されている列では無く)をソートします。同じ列を続けてソートすると、逆順でソートします。
コピー
選択しているセルを、タブ区切りテキスト形式でクリップボードに送ります。タブ文字や改行文字をエスケープしません。
エスケープ付でコピー
選択しているセルを、エスケープ付のタブ区切りテキスト形式でクリップボードに送ります。値に改行文字が含まれている場合でも、直接スプレッドシートなどに貼り付けることができます。
貼り付け
選択したセルに、クリップボードのデータを貼り付けます(UPDATE)。選択範囲外のデータは無視されます。データより選択範囲が大きい場合でも、貼り付けは繰返されません。
列名をコピー
現在表示しているヘッダの値を、タブ区切りテキスト形式でクリップボードに送ります。
セルの値をクリア(
データ型にかかわらず、選択したセルにNullを設定します(UPDATE)。
すべて選択
すべてのセルを選択状態にします。
新しい行を追加
表の最後に新しい行を追加します。この時点では、データベースへの反映は行われません(非リンク行)。値を入力した後で「行をデータベースへリンク」を実行すると、データベースへ反映されます。
クリップボードのデータを追加
クリップボードのタブ区切りテキストを、データベースに連続して追加します(INSERT)。エラーの場合は、非リンク行となります。中断は強制終了以外できませんので注意。
行を複製
表の最後に選択した行のコピーを追加します。この時点では、データベースへの反映は行われません(非リンク行)。値を入力した後で「行をデータベースへリンク」を実行すると、データベースへ反映されます。
行をデータベースへリンク
非リンク行をデータベースへ反映します(INSERT)。
行を削除
選択行を削除するのと同時にデータベース上のテーブルから削除します(DELETE)。(非リンク行の場合はDELETEは実行されません。)複数行を選択していても実行できます。

※COMMIT,ROLLBACKは手動です。

データベース情報ツリー

データベースのテーブルなどの情報をツリー表示します。

簡易SQL文自動生成機能が利用できます。

完全名をコピー
カタログ名、スキーマ名を完全修飾した名称をコピーします。
最新状態に更新
選択したノードの情報を再読み込みして最新状態に更新します。
WHERE句条件部を生成
選択した列の情報からWHERE句より後の部分を生成します。
SELECT句を生成(WHERE付)
選択したテーブルと列の情報からSELECT文を生成します。末尾にWHEREキーワードが付きます。
UPDATE文を生成(WHERE付)
選択したテーブルと列の情報からUPDATE文を生成します。末尾にWHEREキーワードが付きます。テーブルは1つだけ選択できます。
INSERT文を生成
選択したテーブルと列の情報からINSERT文を生成します。テーブルは1つだけ選択できます。

設定保存

以下の設定が、ウィンドウを閉じたとき(終了したときではない)に保存され、次回以降のウィンドウの設定として使用されます。

メニューのキー割り当て

システムディレクトリに"keybind.conf"という名前のファイルを作成し、内容には"メニューのアクション名=KeyStrokeの文字列表現"を設定すると、メニューのキー割り当てが変更できます。

メニュー以外(コンテキストメニューなど)には適用できません。

# 例
# アクション名はsrc/net/argius/stew/ui/window/messages_ja.propertiesのMenu.*を参照
HISTORY_BACK = ctrl K

プロパティ

起動時に値を決定できるパラメータです。Javaのシステムプロパティ(Javaの-Dオプション)で指定するか、stew.propertiesファイルに記述します。

"設定値"は、設定する値についての説明です。設定値のカッコ内の値は既定値です。カッコがないものは既定値がありません。

net.argius.stew.properties - プロパティファイルの場所

設定値:ファイルまたはディレクトリのパス

stew.propertiesファイルを優先的に検索する場所を指定します。

指定されたパスがファイルの場合は、そのファイルをstew.propertiesの代わりにプロパティファイルとして読み込みます。指定されたパスがディレクトリの場合は、そこにstew.propertiesがあるものとみなされます。

指定されない場合は、クラスパス、システムディレクトリの順に検索されます。無い場合はプロパティファイルが無いものとみなされます。

net.argius.stew.directory - 作業ディレクトリ

設定値:ディレクトリパス(カレントディレクトリ)

コマンドで使用するディレクトリの開始時のパスを指定します。デフォルトシステムディレクトリとは異なります。

net.argius.stew.ui.Launcher.class - Launcherの指定

設定値:完全修飾クラス名(net.argius.stew.ui.console.ConsoleLauncher)

net.argius.Stewから実行した場合のみ有効です。

Launcherは、アプリケーションの起動、入力、コマンド実行、出力の管理を行う機能です。ここではそのクラス(実装詳細:net.argius.stew.ui.Launcherインタフェースを実装している必要があります。)を指定します。デフォルトは、標準入出力Launcherです。

net.argius.stew.ui.OutputProcessor.class - OutputProcessor

設定値:完全修飾クラス名(net.argius.stew.ui.console.ConsoleOutputProcessor)

net.argius.Stewから実行した場合のみ有効です。

OutputProcessorは、出力制御を行う機能です。ここではそのクラス(実装詳細:net.argius.stew.ui.OutputProcessorインタフェースを実装している必要があります)を指定します。デフォルトは、標準出力制御です。

net.argius.stew.query.timeout - クエリのタイムアウト値

設定値:整数秒(0)

コマンド内のクエリが発行時に設定するタイムアウト値を指定します。0以下はタイムアウト未指定とみなされます。

(実装詳細:java.sql.Statement#setQueryTimeoutに設定する値。)

net.argius.stew.rowcount.limit - 出力件数の上限

設定値:上限値(Max=Integer.MAX_VALUE≒2,147,000,000)

検索結果を出力する上限件数を設定します。

net.argius.stew.command.Import.batch.limit - Importのバッチ数の上限値

設定値:上限値(10000)

Importコマンドで一度に実行する件数の上限値を決定します。

net.argius.stew.ui.window.resident - Windowの常駐

設定値:整数分

実験的な機能です。

指定した分ごとに画面の再描画を行い、アプリケーションがスワップアウトしないようにします。

Logger用

デバッグ用のLoggerに関するプロパティです。プロパティファイルに直接は指定できません(-Dオプションで指定可能)。

標準のLoggingAPI(java.util.logging)を使用したい場合は、以下のシステムプロパティを設定してください。LoggingAPI自体の設定は、APIドキュメントを参照してください。

-Dnet.argius.logging=true
-Dnet.argius.logging.class=net.argius.logging.LoggingApiWrapper