Stewは、JDBCを使った小規模なデータベースフロントエンドです。 コマンドラインのようなインターフェイスを持っていて、SQLを入力して実行したりできます。 ちょっとした処理であれば、バッチのように使用することもできます。
概要については、README_ja.mdをご覧ください。
パスワードは、デフォルトではそのまま保存します。 生のパスワードを保存したくない場合は、暗号化を利用できます。
詳しくは、使い方-接続設定を参照してください。
デフォルトでは、disconnectコマンドによりコネクションを切断するとき、rollbackを発行しません。 DBMSによっては、トランザクションが自動的にコミットされてしまうことがありますので注意が必要です。
「切断時に自動ロールバック」を設定すると、disconnectの際に自動的にrollbackを発行します。 詳細は、使い方-接続設定を参照してください。
プロジェクトサイトにて追加説明を行っていますので、あわせてご利用ください。
http://stew.sourceforge.jp/
http://argius.net/wiki/index.php?Stew%20tutorial
(argius.net)
Java実行環境バージョン6(JRE6)以上がインストールされている必要があります。 また、利用するデータベースのJDBCドライバが必要です。
リリースパッケージ(通常はzipファイル)を任意のディレクトリに展開します。
インストールサイズを最小限にしたい場合は、 リリースパッケージに含まれている"stew.jar"だけを展開してください。
起動コマンドの設定は、次の起動方法を参照してください。
GUIモードで起動する場合は、以下のコマンドを実行します。
> java -jar stew.jar --gui
CUIモードで起動する場合は、以下のコマンドを実行します。
> java -jar stew.jar --cui
起動スクリプトもしくはショートカットやエイリアスを作成しておくと便利です。 stew.propertiesに以下の設定を追加すれば、JarファイルのダブルクリックでGUI起動できるようになります。
stew.boot=GUI
Stewを実行すると、システムディレクトリ".stew"が作成され、設定の保存に使用されます。 ".stew"ディレクトリは、デフォルトではカレントディレクトリに作成されます。
インストールしたファイルと".stew"ディレクトリを削除してください。
Stewを使用するには、JDBC接続が可能なデータベースと、JDBCドライバが必要です。 JDBCドライバ自体の詳細については、各データベースの説明書などを参照してください。
CUIの場合は、起動時に--editオプションを指定、またはコマンドとして--editを実行すると、 編集プログラムが起動します。
GUIの場合は、メニューの"接続設定"を実行すると、編集ダイアログが開きます。
それぞれの設定項目の説明は次のとおりです。
connectコマンドなどに渡すIDです。英数字のみ指定できます。
プロンプトに表示される接続名です。文字制限は特にありません。
JDBCドライバのクラスパスを指定します。Javaの-CLASSPATHオプションと同じ形式で指定します。
JDBCドライバのDriver実装クラスを指定します。GUIの場合、クラスパスが指定されていれば、 "ドライバの検索"から選択できます。
JDBCのURL(DriverManager.getConnection(url)に指定するurlと同じもの)を指定します。
JDBCのURLと同時に指定するユーザIDを指定します。
ユーザIDのパスワードを指定します。
パスワードの保存方法を選択します。次項"パスワードの保存について"を参照してください。
コネクションをREADONLYに設定し、更新の有るコマンドを実行できないようにします。 (コマンド側のReadOnlyに拠る。)
設定すると、切断時に自動でロールバックします。
これらの情報は、".stew/connectors.properties"に保存されます。 手動で編集することもできますが、その際は注意して行ってください。
パスワードは設定ファイルに保存されるため、そのまま保存すると都合が悪い場合があります。
パスワードの保存方法は、暗号化処理を選択することができます。
(デフォルト)パスワードをそのまま保存します。
PBE暗号を使用してパスワードを保存します。 メニュー-暗号鍵の入力で暗号鍵を入力した後、 接続設定でパスワードを入力して保存すると、暗号化された状態で保存します。 次回起動時、再度暗号鍵を入力するまで、パスワードが復号できなくなります。
独自のパスワード暗号化を追加することもできます。 (実装詳細:Passwordインタフェースの実装クラスを追加します。)
接続設定なしで接続を行うことができます。 ドライバが特定できるようになっている必要があります。(次の段落で説明)
> connect <user>/<password>@<URL>
(例)
> connect user/password1@jdbc:firebirdsql://127.0.0.1//home/argius/test.fdb
最も簡単な方法は、ドライバファイルを起動ディレクトリに置くだけです。 ドライバ名が指定されていない場合は、このファイルの中を探索してドライバ名を特定します。 但し、この探索は時間がかかるので、時間を節約するには"jdbc.drivers"システムプロパティを 指定してください。
通常の起動では、対話モードでの操作となります。 対話モードでは、コマンド入力待ち状態になった時にコマンドを入力し、 処理が終わると再びコマンド入力待ちになります。
Stewの処理が一行の入力で完結します。 "stew"コマンドを設定していると仮定すると、次のような形式で実行します。
> stew <connector-id> <command>
実行すると、
このモードでは、ご利用のshell環境の制約(例えば、ワイルドカード,リダイレクト など)を 受けますのでご注意ください。
長いコマンドに別名(alias)をつけて、短縮コマンドとして利用できます。 詳しくは、コマンドalias, unaliasを参照してください。
組み込みコマンドは、Stewから切り離すことができないコマンドです。 それ以外は、追加コマンドとして実装されています。 (実装詳細:追加コマンドはCommandクラスのサブクラスによる実装ですが、 組み込みコマンドはCommand.invokeメソッドに直接書かれている処理です。)
コマンドでない文が指定された場合は、SQLとして実行されます。 バインド変数のあるSQL文を使う場合は、最後に";"(セミコロン)をつけ、 それ以降にカンマ区切りでパラメータを指定できます。 この機能は、一部のコマンドでも利用できます。
組み込みコマンドのうち、connect/-e/-f/alias/unalias/exitは接続時以外でも使用できます。
> connect <connector-id>
> -c <connector-id>
予め用意した接続設定を使用して、データベースに接続します。
対話モードでは、disconnectまたは強制的に切断されるまで、接続が維持されます。 すでに接続中の場合は、その接続を切断してから接続を行います。
> disconnect
> -d
データベースとの接続を切断します。
接続設定でrollbackを指定している場合は、rollbackを試みます。
現在のトランザクションでの変更をコミットします。
コミットする際は、誤って必要なデータを削除しないよう注意してください。
現在のトランザクションでの変更をロールバックします。
> -e <コマンド> -e <コマンド> ...
コマンドを連続して実行させます。 exportなどを同時に実行する場合や、コマンドラインからの実行の場合に使います。
> -f <ファイル>
ファイルの内容をコマンドとして実行します。 再帰的に指定できますが、無限ループは検知できないので注意してください。
> -s <ファイル>
ファイルの内容をスクリプト(JavaScript)として実行します。
スクリプト内では、以下の変数が定義済みになります。
> cd <ディレクトリ>
カレントディレクトリを指定したディレクトリに移動します。 (このカレントディレクトリはStew内部で管理するものです。)
> @
カレントディレクトリとシステムディレクトリの場所を表示します。
> ? [<プロパティ名> [<プロパティ名2> ... <プロパティ名n>]]
指定されたシステムプロパティを表示します。(System.getProperty)
引数を指定しない場合は、JRE,OS,Localeの情報を表示します。
> ?
JRE : ...
OS : ...
Locale : ja_JP
> ? java.version user.timezone zzz
java.version=[1.6.0_##]
user.timezone=[Asia/Tokyo]
zzz=undefined
> alias [<エイリアス> [<コマンド>]]
コマンド別名を登録します。 引数が1つで実行した場合は、既に設定されたコマンド内容を表示します。 引数なしで実行した場合は、すべての定義済みエイリアスを表示します。
登録または表示の前にファイルからメモリ上の情報を最新化します。 ファイルを直接修正したり、他のスレッドで変更した内容を反映させたい場合は、 このコマンドを実行してください。 (実装詳細:循環参照などの無限ループ抑制のために、展開の深さは最大100。)
> alias
エイリアスは未定義です。
> alias search select * from
> alias count select count(*) from
> alias search
alias search=[select * from]
> search table1
>> select * from table1
(select * from table1 の結果)
>
> unalias <エイリアス>
コマンド別名を解除します。解除する対象がない場合は何もしません。 解除対象の有無にかかわらず、ファイルからメモリ上の情報を最新化します。
> exit
Stewを終了します。確認待ちは行いません。
接続中の全てのコネクションは自動的に切断されます。 ロールバックは、自動ロールバックを設定しているコネクタのみ行われます。 自動ロールバックについては、使い方-接続設定を参照してください。
> load [<SQLファイル> | <データファイル> <テーブル名> [ HEADER ]]
指定されたファイルを読み込んで、SQLを実行します。
パラメータが1個の場合は、ファイルをSQL文と見なして実行します。
パラメータが2個以上の場合は、ファイルをデータファイルと見なして、インポートを実行します。 ファイルの拡張子によって、ファイル形式が自動的に選択されます。 (実装詳細:基本的にはimportと同じ動作ですが、バッチ実行ではなく1件ずつ処理されます。)
*. .csv : CSV形式 *. .xml : XML形式(定義:src/net/argius/stew/io/stew-table.dtd) *. 上記以外 : TAB区切りテキスト形式
> import [<データファイル> <テーブル名> [ HEADER ]]
ファイルをデータファイルと見なして、インポートを実行します。 ファイルの拡張子によって、ファイル形式が自動的に選択されます。 (実装詳細:基本的には、loadのパラメータ2個以上指定した時と同じ動作ですが、 Statement.addBatch()を使用します。)
一括で処理する件数を[#property.Import.batch.limit:プロパティ]で設定することができます。
> export <ファイル> [ HEADER ] [command(select|find|report)]
指定したファイルに、コマンドの検索結果を出力します。 ファイルの拡張子によって、ファイル形式が自動的に選択されます。
> 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 <テーブル名パターン> [<テーブル種別パターン> [<スキーマ名パターン> [<カタログ名パターン> [ FULL ]]]]
参照可能なテーブルの一覧を表示します。 "パターン"というキーワードを含むパラメータは、ワイルドカード(#,?)が指定できます。
> report - | <テーブル名> [ FULL | PK | INDEX ]
接続中のコネクションに関する情報を表示します。
-(ハイフン)が指定された場合は、DBとJDBCドライバの名称とバージョン、 接続ユーザとアドレスを表示します。
テーブル名のみが指定された場合は、テーブルの列情報が表示されます。
テーブル名とオプションが指定された場合は、PKを指定するとプライマリキーの一覧が、 INDEXを指定するとインデックスキーの一覧が、それぞれ表示されます。 FULLを指定すると、API(DatabaseMetaData#getColumns)が返すすべての列が表示されます。
> download <ルートディレクトリ> SELECT <ダウンロードするデータの列> [, ファイルパス...] FROM ...
1つの列のデータをダウンロードしてファイルに保存します。
どのデータ型でも利用できます。 長めのテキスト項目やラージオブジェクト(BLOB,CLOB)を一挙にファイルに保存する場合などに有用です。
ファイルは、複数ファイルをダウンロードできるようにするため、 データからファイル名を生成できるようになっています。
ファイル名は、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 <ファイルパス> <INSERT文 or UPDATE文>
SQLのプレースホルダで指定された列にファイル内容を登録します。
> wait 秒(小数第3位まで指定可)
指定された秒数、待機します。
連続したコマンドを実行する場合などに使えるかもしれません。
GUIモードのメニューについての説明です。
新しいウィンドウを開きます。
新しいウィンドウは、元のウィンドウとは独立した接続で処理が行われます。
ウィンドウを閉じます。 コネクションが接続中の場合は、確認ダイアログを表示します。
開いているウィンドウが1つの場合は、終了(X)と同じ動作となります。
アプリケーションを終了します。 確認ダイアログが表示され、"はい"を選択すると終了します。
選択範囲をクリップボードにコピーして、選択された部分を削除します。 (基本的に、一般的なアプリケーションと同じ処理です。)
選択範囲をクリップボードにコピーします。 (基本的に、一般的なアプリケーションと同じ処理です。)
カーソル位置にクリップボードの内容を貼り付けます。 (基本的に、一般的なアプリケーションと同じ処理です。)
選択している領域(テーブルまたは入出力欄)を全選択状態にします。
選択している領域(テーブル、テーブル列名、入出力欄、情報ツリー)内の文字列を検索します。
テーブル、テーブル列名はセル単位で検索します。 入出力欄は、一致部分をハイライトします。 情報ツリーは、選択しているノードと同じ深さのノードとそれらのサブノード単位で検索します。
オプションで、「正規表現を使用する」「大文字と小文字を区別しない」が指定できます。
検索結果エリアと入力欄のフォーカスを入れ替えます(toggle)。
入出力欄のメッセージをクリアします。
選択された場合、ウィンドウの下部にステータスバーを表示します。
設定は保存されます。
選択された場合、検索結果の列名に番号を付けます。
選択された場合、データベース情報ツリーペインを表示します。
選択された場合、ウィンドウを常に手前に表示するようにします。
検索結果を表示した際のクエリを再発行して、最新状態を表示します。
検索結果の列幅をそれぞれ1.5倍に拡大します。
検索結果の列幅をそれぞれ2/3に縮小します。
検索結果の列幅を自動調整します。次項の「列幅自動調整」で選択されたモードで調整されます。
検索結果表示時に、検索結果の列幅を自動調整するモードを選択します。
コマンドを実行します。入出力欄でエンターキーを押したのと同じ効果があります。
コマンドを中断します。サーバ側の処理はキャンセルされません。
コマンド履歴を1つ遡ります。
コマンド履歴を1つ進みます。
確認ダイアログを表示し、OKを押すとロールバックを実行します。
確認ダイアログを表示し、OKを押すとコミットを実行します。
接続リストを表示します。 接続リストで接続したい接続IDを選択して"了解"を押すと、connectと同じ処理が実行されます。
接続を切断します。disconnectコマンドと同じです。
コマンドが終了した時、そのウィンドウが非アクティブの場合に 通知のために発生させるアクションを設定します。
起動中のプロセスで接続設定のパスワード暗号化に使用される秘密鍵を入力します。
接続設定ダイアログを表示します。
検索結果をファイルに出力します。 検索結果が表示されている場合のみ有効です。
検索結果のテーブルにファイルをインポートします。 importコマンドとは独立した処理です。検索結果が表示されている場合のみ有効です。
検索結果をファイルに出力します。 exportコマンドとは独立した処理です。検索結果が表示されている場合のみ有効です。
ヘルプ(このファイル)をデフォルトブラウザで表示します。
環境によっては表示できない場合があります。
バージョン情報ダイアログを表示します。
テキスト入力欄は共通して、 「元に戻す」「やり直す」「切り取り」「コピー」「貼り付け」「すべて選択」の ショートカットが利用できます。
これらは、コンテキストメニューからも操作できます。
検索コマンドを実行したときに、結果を表示します。 最左列は行番号が表示されます。列幅自動調整が設定されていれば、列幅が自動的に調整されます。
セルを編集すると、テーブルに反映(UPDATE)されます。 行番号が"+"になっている行は「非リンク行」です。 非リンク行については、コンテキストメニューを参照。
コマンドの入力とメッセージの出力が同居する、コマンドラインのようなインターフェイスです。
エンターキーを押すと、プロンプトから末尾までがコマンドとして解釈され実行されます。 カーソルが末尾にない場合は、カーソルが末尾に移動します。 プロンプトより前の部分は編集不可となっています。
デスクトップからファイルをドロップすると、 「パスの貼り付け」「内容の貼り付け」のいずれかが実行できます。
直前のコマンドとその実行時間が表示されます。 実行時間は、timeコマンドとは異なり、コマンドの開始から終了までの所要時間となります。
マウスの右クリックにより、そのコントロールに即した機能のメニューが表示されます。 表示されるメニュー内容は、入力部分ごとに異なります。
メニューは以下のとおりです。
右クリックした列(選択されている列では無く)をソートします。 同じ列を続けてソートすると、逆順でソートします。
選択しているセルを、タブ区切りテキスト形式でクリップボードに送ります。 タブ文字や改行文字をエスケープしません。
選択しているセルを、エスケープ付のタブ区切りテキスト形式でクリップボードに送ります。 値に改行文字が含まれている場合でも、直接スプレッドシートなどに貼り付けることができます。
選択したセルに、クリップボードのデータを貼り付けます(UPDATE)。 選択範囲外のデータは無視されます。 データより選択範囲が大きい場合でも、貼り付けは繰返されません。
すべてのセルを選択状態にします。
データ型にかかわらず、選択したセルにNullを設定します(UPDATE)。
選択したセルに現在時刻を設定します(UPDATE)。
現在表示しているヘッダの値を、タブ区切りテキスト形式でクリップボードに送ります。
現在表示しているヘッダの文字列から列名を検索します。
表の最後に新しい行を追加します。 この時点では、データベースへの反映は行われません(非リンク行)。 値を入力した後で「行をデータベースへリンク」を実行すると、データベースへ反映されます。
クリップボードのタブ区切りテキストを、データベースに連続して追加します(INSERT)。 エラーの場合は、非リンク行となります。 中断は強制終了以外できませんので、データ量が多い場合はimportコマンドを推奨します。
表の最後に選択した行のコピーを追加します。 この時点では、データベースへの反映は行われません(非リンク行)。 値を入力した後で「行をデータベースへリンク」を実行すると、データベースへ反映されます。
非リンク行をデータベースへ反映します(INSERT)。
選択行を削除するのと同時にデータベース上のテーブルから削除します(DELETE)。 (非リンク行の場合はDELETEは実行されません。) 複数行を選択していても実行できます。
※COMMIT,ROLLBACKは手動です。
データベースのテーブルなどの情報をツリー表示します。
簡易SQL文自動生成機能が利用できます。
ノードの文字列表現をコピーします。
ノードを表す単純な名称をコピーします。
カタログ名、スキーマ名を完全修飾した名称をコピーします。
選択したノードの情報を再読み込みして最新状態に更新します。
選択した列の情報からWHERE句より後の部分を生成します。
選択したテーブルと列の情報からSELECT文を生成します。 末尾にWHEREキーワードが付きます。
選択したテーブルと列の情報からUPDATE文を生成します。 末尾にWHEREキーワードが付きます。 テーブルは1つだけ選択できます。
選択したテーブルと列の情報からINSERT文を生成します。 テーブルは1つだけ選択できます。
結果セットに同じ列名がある場合はその列にジャンプします。 ダブルクリックでも同じ効果があります。
列ノードの番号表示/非表示を切り替えます。
接続したときに自動で指定したノードを展開する機能があります(実験的機能)。
システムディレクトリに"autoexpansion.tsv"という名前でファイルを作成します。 内容は、展開したいノードのリストを1行毎にTSV形式で記載します。 実際にツリーに表示されるノード文字列をTABでつないだものになります。
# 例: コネクタ"H2 DB1"(IDでなく接続名)のCATALOG1.PUBLIC.TABLE1を展開する
H2 DB1(TAB)CATALOG1(TAB)PUBLIC(TAB)TABLE(TAB)TABLE1
以下の設定が、ウィンドウを閉じたとき(終了したときではない)に保存され、 次回以降のウィンドウの設定として使用されます。
システムディレクトリに"keybind.conf"という名前のファイルを作成し、 内容には"メニューのアクション名=KeyStrokeの文字列表現"を設定すると、 メニューのキー割り当てが変更できます。
メニュー以外(コンテキストメニューなど)には適用できません。
# 例
# アクション名はsrc/net/argius/stew/ui/window/messages.u8pのMenu.#を参照
lastHistory = ctrl K
起動時に値を決定できるパラメータです。
Javaのシステムプロパティ(Javaの-Dオプション)で指定するか、stew.propertiesファイルに記述します。 "設定値"は、設定する値についての説明です。設定値のカッコ内の値は既定値です。 カッコがないものは既定値がありません。
設定値:ファイルまたはディレクトリのパス
stew.propertiesファイルを優先的に検索する場所を指定します。
指定されたパスがファイルの場合は、そのファイルをstew.propertiesの代わりに プロパティファイルとして読み込みます。
指定されたパスがディレクトリの場合は、そこにstew.propertiesがあるものとみなされます。
指定されない場合は、クラスパス、システムディレクトリの順に検索されます。 無い場合はプロパティファイルが無いものとみなされます。
設定値:ディレクトリパス(カレントディレクトリ)
コマンドで使用するディレクトリの開始時のパスを指定します。 デフォルトシステムディレクトリとは異なります。
設定値:整数秒(0)
コマンド内のクエリが発行時に設定するタイムアウト値を指定します。 0以下はタイムアウト未指定とみなされます。
(実装詳細:java.sql.Statement#setQueryTimeoutに設定する値。)
設定値:上限値(Max=Integer.MAX_VALUE≒2,147,000,000)
検索結果を出力する上限件数を設定します。exportなどには適用されません。
設定値:上限値(10000)
Importコマンドで一度に実行する件数の上限値を決定します。
設定値:整数分
実験的な機能です。
指定した分ごとに画面の再描画を行い、アプリケーションがスワップアウトしないようにします。
Stew4は標準のLoggingAPIを(ラップして)使用しています。
ログ出力を有効にする場合は、システムプロパティ"java.util.logging.config.file"を設定します。
以下は起動オプションの例。
-Djava.util.logging.config.file=logging.properties