JavaEE 7をやってみよう。 HSQLDB/DBeaver/データソースエクスプローラ その1
前シリーズと似たような話題。
前シリーズでSQLiteを試しておいて、
あっさり次のDBの登場となりました。
JPAのサンプルを作ってみようとして試行錯誤中、
O/Rマッパー用のBeanを自動生成する段階で
どうしても生成したクラスがビルドエラーとなるのでSQLiteは諦めた。
似たようなDBにHyperSQL DBというのがあるので、
これを使ってみようと思う。
HSQLDBにはEmbeddedモードとServerモードがあって、
EmbeddedモードはSQLiteと同じようにJDBCドライバから直接DBファイルを参照できる。
ただし、1箇所で接続している間はロックされてしまうので、
開発にはちょっと使いにくい。
そんなわけで、HSQLDBのServerモードを利用することにした。
導入手順は以下の通り。
- 1. ファイルの入手
- HSQLDBのサイトからファイルをダウンロード
http://hsqldb.org/ - 2. インストール
- ダウンロードしたファイルを適当な場所に解凍。終了。
- 3. シェルスクリプトの作成
- 環境がWindowsの場合は不要。
要は起動用のスクリプトがDOSバッチでしか提供されていないので、
元ネタをコピーしてシェルスクリプト化するだけ。
javaコマンドで目的のクラスを呼んでいるだけなので、難しくない。 - 4. 起動
- コンソールからHSQLDBの{インストールディレクトリ}/binへ移動して、runServer.sh*1を実行するだけ。
パラメータ未指定でも動作はするが、DBファイル名やDB名がデフォルトになってしまうので、気になる場合はパラメータで指定すると良い。パラメータ書式 効果 --database.{i} file:{fileName} DBファイル名の定義。
{i}にはインデックスを指定する。
{fileName}にはファイル名を指定する。
実際にはこれに拡張子が付いたファイルが生成される。
ex. --database.0 file:localDB--dbname.{i} {dbname} DB名の定義。
{i}にはインデックスを指定する。
{dbName}にはDB名を指定する。
ex. --dbname.0 localDB--help ヘルプをみる。 - 5. DBファイルの確認
- runServer.shの中でHSQLDBの{インストールディレクトリ}/dataへ移動しているので、このディレクトリの中を覗いてみるといくつかファイルが作られているはず。
これがDBのデータファイルとなる。 - 6. 終了
- コンソールにも表示されるが、Ctrl+Cのシグナルを送ると終了となる。
といったところで、次回へ続く。
*1:runServer.batを自前でshに書き換えたもの。
ジョイスティックの連射機能
Ubuntuで古い昔のシューティングゲームをたまにやる。
アメリカ陸軍の戦闘機がなぜかミッドウェイにいる空母から発艦して
旧日本海軍の戦艦を撃沈するあのゲームとか、
あの時代のシューティングゲームが気軽に楽しめるので好きなのだが、
今、PC上でプレイするとある種の不満も出る。
それはやたらと必要になる「連射」。
古いゲームは連射機能が無いので、プレイ中の連射がなかなかシンドイ。
PC用コントローラを使ってもシンドイ。
WindowsにはJoyToKeyという
ジョイスティックのボタンにキーボードのボタンを割り当てるアプリがあり、
そのアプリに連射モードもあったのでよく利用していた。
Ubuntuにも同じようなアプリでantimicroというものがあるので、
導入手順についてメモしておく。
- ジョイスティックの導入
- USBのPC用コントローラなら何もしなくても認識するが、もしのも為、メモしておく。
jstest-gtkはジョイスティックの動確・調整に使える。
sudo apt-get install joystick jstest-gtk
- antimicroの導入
- ppaを追加してインストールすることになる。
Dashから起動できる。
$ sudo add-apt-repository ppa:ryochan7/antimicro $ sudo apt-get update $ sudo apt-get install antimicro
起動するとこんな画面が出る。
コントローラマッピングでantimicroのボタン定義に対してコントローラのボタン割り当てを行う。
例えば、XボタンにキーボードのAを割り当てるとしたらXボタンのボタンを押して、
設定画面を出してキーを登録する。連射モードの設定もここで行える。
対象のゲームのShotボタン(キーボード操作での)を登録すればOK。
antimicroを起動した状態で目当てのゲームを実行すれば
連射モードが無くても連射が使えるようになる。
また、ジョイスティック未対応のゲームでもキーボードのコントロールをantimicroに設定しておけば、
ジョイスティックでゲームができる。
Linuxも便利になったなぁ、としみじみ思う。
JavaEE 7をやってみよう。 SQLite/DBeaver その5
その4のつづき。
今更だけど、このシリーズ、JavaEE関係ないなぁとは思うけど、
横着できるツールを探して時短に活用するってのもテクニックなので、
無駄かもしらんけれど、こんな調査もたまには必要だよねっ。
ちなみに今回はSQLを書かずに、諸々の操作ができて、
データ出力とか検索とか使いやすい機能が揃っているか、
DBViewerと比べてどうかってのが調査の観点です。
気を取り直して、
DBeaverでのデータ入力、行ってみよう。
- データ入力
- 目的のテーブルを開いて、データのタブを選ぶとデータ参照の表が表示される。
今は空なので、ツールからデータ入力をしてみる。
ウィンドウ下部の「+」ボタンを押すと行が追加され、セルが編集可能となる。
適当に入力し、ウィンドウ下部の「レ」ボタンを押すと保存される。「×」は取り消し。 - データの表示
- 目的のテーブルを開いて、データのタブを選ぶとデータが自動で抽出される。
表示されるカラムだとか順序はフィルターボタンから開くダイアログで好きに変えることができる。
データの絞り込みはフィルター入力ボックスに条件を入力することで行える。
表示形式もグリッド表示とテキスト表示で切り替えることができる。
また、通常はY方向(下方向)にデータが表示されるが、X方向(横方向)に表示することもできる。
ただし、1レコードづつだけれど。 - SQL自動生成
- 表示データを選択した後、コンテキストメニューから「Generate SQL」を選ぶことで、「Select by Unique Key]、「Insert]、「Delete by Unique Key]の3種類のSQLを生成できる。
- データ削除
- グリッドから対象行を選択して、コンテキストメニューから削除を選ぶか、Deleteを押すと削除マーカーがつく。
編集後、ウィンドウ下部の「レ」ボタンを押すと保存され、「×」で取り消しとなるのは入力と同じ。 - データエクスポート
- Database Navigatorからテーブルを選択し、コンテキストメニューから「データのエクスポート」を選ぶと出力形式を選択するダイアログが表示される。
出力形式は、XML, HTML, CSV, SQLとひと通りあり、なおかつ「データベース」なんてのもある。
テーブルからテーブルへ、select 〜, insertなんだろうけど、SQL書くのとどっちが早いのだろう。
ファイル出力に関しては、直接クリップボードにも出力できるので便利。
出力結果はこんな感じ。
<?xml version="1.0" ?> <!DOCTYPE EMP [ <!ELEMENT EMP (DATA_RECORD*)> <!ELEMENT DATA_RECORD (EMPNO?,ENAME?,JOB?,MGR?,HIREDATE?,SAL?,COMM?,DEPTNO?)+> <!ELEMENT EMPNO (#PCDATA)> <!ELEMENT ENAME (#PCDATA)> <!ELEMENT JOB (#PCDATA)> <!ELEMENT MGR (#PCDATA)> <!ELEMENT HIREDATE (#PCDATA)> <!ELEMENT SAL (#PCDATA)> <!ELEMENT COMM (#PCDATA)> <!ELEMENT DEPTNO (#PCDATA)> ]> <EMP> <DATA_RECORD> <EMPNO>1</EMPNO> <ENAME>Prince Umayado</ENAME> <JOB>Regent</JOB> <MGR></MGR> <HIREDATE>1965/01/04</HIREDATE> <SAL>1,000</SAL> <COMM>1,000</COMM> <DEPTNO>1</DEPTNO> </DATA_RECORD> <DATA_RECORD> <EMPNO>2</EMPNO> <ENAME>Hirofumi Ito</ENAME> <JOB>Prime ministar</JOB> <MGR></MGR> <HIREDATE>1986/01/04</HIREDATE> <SAL>1,000</SAL> <COMM>1,000</COMM> <DEPTNO>1</DEPTNO> </DATA_RECORD> <DATA_RECORD> <EMPNO>3</EMPNO> <ENAME>Souseki Natsume</ENAME> <JOB>Novelist</JOB> <MGR></MGR> <HIREDATE>2007/04/02</HIREDATE> <SAL>1,000</SAL> <COMM>1,000</COMM> <DEPTNO>1</DEPTNO> </DATA_RECORD> <DATA_RECORD> <EMPNO>4</EMPNO> <ENAME>Hideyo Noguchi</ENAME> <JOB>Doctor</JOB> <MGR></MGR> <HIREDATE></HIREDATE> <SAL>1,000</SAL> <COMM>1,000</COMM> <DEPTNO>1</DEPTNO> </DATA_RECORD> </EMP>
- HTML
EMPNO | ENAME | JOB | MGR | HIREDATE | SAL | COMM | DEPTNO |
---|---|---|---|---|---|---|---|
1 | Prince Umayado | Regent | 1965/01/04 | 1,000 | 1,000 | 1 | |
2 | Hirofumi Ito | Prime ministar | 1986/01/04 | 1,000 | 1,000 | 1 | |
3 | Souseki Natsume | Novelist | 2007/04/02 | 1,000 | 1,000 | 1 | |
4 | Hideyo Noguchi | Doctor | 1,000 | 1,000 | 1 |
"EMPNO","ENAME","JOB","MGR","HIREDATE","SAL","COMM","DEPTNO" 1,Prince Umayado,Regent,,"1965/01/04","1,000","1,000",1 2,Hirofumi Ito,Prime ministar,,"1986/01/04","1,000","1,000",1 3,Souseki Natsume,Novelist,,"2007/04/02","1,000","1,000",1 4,Hideyo Noguchi,Doctor,,,"1,000","1,000",1
INSERT INTO EMP (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO) VALUES ( 1,'Prince Umayado','Regent',NULL,'1965/01/04',1000.0,1000.0,1); INSERT INTO EMP (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO) VALUES ( 2,'Hirofumi Ito','Prime ministar',NULL,'1986/01/04',1000.0,1000.0,1); INSERT INTO EMP (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO) VALUES ( 3,'Souseki Natsume','Novelist',NULL,'2007/04/02',1000.0,1000.0,1); INSERT INTO EMP (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO) VALUES ( 4,'Hideyo Noguchi','Doctor',NULL,'',1000.0,1000.0,1);
- データのインポート
- DataNavigatorからテーブルを選んでコンテキストメニューから「import Data」で実行できるが、
これは少しイケてない。
データベースからデータベースへのインポートしか備えていない。
これではデータをエクスポートする意味があまりない。
と、検索、追加、削除などをプラグインで操作してみたが、データのインポートだけが劣るぐらいでDBViewerと比べても機能の見劣りはさほどない。
多彩なRDBに対応しているし、ドライバもセットアップ時にダウンロードできる仕組みなので、
DBViewrの代替には十分成りうる。
もっともフリーのDBクライアントもいくつかあるので、これにこだわる必要があるか、というと、考えるところ。
結局は、自分の使いやすいツールを見つけて使うか、ってところに落ち着くのか。
JavaEE 7をやってみよう。 SQLite/DBeaver その4
その3のつづき。
CREATE TABLE DEPT ( DEPTNO INTEGER NOT NULL, DNAME TEXT(14), LOC TEXT(13), PRIMARY KEY (DEPTNO) )
SQLの実行はCTRL + ENTERとのこと。
コミットしてもDatabase Navigaterには反映されないが、内部では正しくコミットされている。
Database Navigaterをリフレッシュするとちゃんと表示される。
最後に外部キーを追加してみる。
- 外部キーの追加
- EMP表をダブルクリックし外部キータブを開く。コンテキストメニューから「新規登録 外部キー」を選ぶ。
- 親子関係を選択
- 参照テーブルを選択。(ダイアログの上側の表) ここではDEPT表を選ぶ。
すると列(ダイアログの下側の表)に参照関係の列が自動で表示される。
列はプルダウンとなっていて候補が複数ある場合は自分で選択もできる。
削除時や更新時の動作もここで指定できる。 - 完了
- 完了ボタンを押すと外部キーが作成される。
- コミット
- 編集内容を保存すると、やはりダイアログにDDLが表示される。永続化ボタンを押して反映する。
と思ったら、エラーった。
SQLiteはAlterが使えないのか。
思わぬところで。。。*1
まぁ、他のRDBならこんな感じでOKなんだろう。
気を取り直して、次回はデータの登録と検索、削除なんかをやってみよう。
*1:SQLiteの外部キーは癖がある模様。とりあえず、Alterはダメっぽい。
sql - How do I add a foreign key to an existing sqlite (3.6.21) table? - Stack Overflow
JavaEE 7をやってみよう。 SQLite/DBeaver その3
その2のつづき。
DBeaverでテーブルを一つ作ってみる。
テーブルのサンプルとしては、あのemp表にしてみようかと思う。
- 新規登録テーブル
- Database Navigaterからリソースのテーブルを選択、
右クリックしてコンテキストメニューから「新規登録テーブル」を選ぶと
リソースにNewTableが追加され、テーブル情報のウィンドウが開く。 - テーブル名変更
- テーブルの名前を変える。
テーブル名の値を変えればOK。
ここでは仮に「emp」とした。 - 列の追加
- 列のタブを開き、コンテキストメニューから「新規登録 列」を選ぶ。
ビューにカラムが追加されるので、列名と型、属性などを設定する。 - プライマリキーの設定
- Unique Keyのタブを開き、コンテキストメニューから「新規 Unique Key」を選ぶ。
ダイアログからキーとする項目をチェックしてOKを押すと設定される。 - 外部キーの設定
- 外部キーのタブを開き…
DEPT表がまだないので、詳細は割愛。
Unique Keyと同じイメージで作成できる。 - DDLの確認
- 入力内容を保存するとダイアログが開き、DDLが表示される。
「永続化」ボタンを押すとテーブルが作成される。 - コミット
- OracleなんかだとDDLは自動コミットなのだが、SQLiteはDDLを流してもコミットされないため、
手動でコミットする必要がある。(auto-commitをOFFにしたから。。。)
しかし、ぱっと見てもコミットボタンが見当たらない。
メニューバーのSQLエディタからSQLエディタを開くと、ツールバーにコミットボタンがお出ましになる。
忘れずにコミットしないと水の泡。
コミット/ロールバックのボタン表示/非表示以外は他のアプリとそう大差がなく扱いやすい。
もっとも、テーブルを作るならDDLを書いたほうが早いよ、多分。
というわけで、次回へ続く。
JavaEE 7をやってみよう。 SQLite/DBeaver その2
その2のつづき。
EclipseのプラグインでDB参照できるものといえば、
真っ先に思いつくのがDBViewer。
仕事では大変お世話になった。
このプラグインは少し使うにはいいのだが、
かゆいところに手が届いていないなぁ、といつも思っている。
そこで何か新しいDBを操作できるプラグインが無いかと
Eclipseマーケットプレイスを見てみると、
「DBeaver」というプラグインを見つけた。
各種のDBに対応している様で、SQLiteにも対応している。
都合がいいので「DBeaver」を使ってみることにした。
データベースリソースを作るまでの手順を以下にメモしておく。
- 接続設定の追加
- Database Navigaterを右クリックして「新規登録 接続」を選択するとダイアログが開く。
- 接続するDBの種類を選択
- 使用するDBにあった項目を選ぶ。
SQLiteを使うので、それを選んだ。 - 接続先の設定
- SQLiteの場合、読み込むファイルの選択といった具合になる。
ちなみに初めて利用する場合、
DriverファイルをDBeaverのサイトからダウンロードするかどうか尋ねられる。
Driverを用意していない場合、この提案に乗ると手間が省けて楽。
Driverファイルはワークスペースのmetadataフォルダに格納される。 - 接続の設定
- デフォルトでも良いかと思ったが、auto-commitがONになっていたので、これだけはOFFにした。
- 接続のテスト
- 接続テストを実施して、接続できることを確認。
- 完了
- Database Navigaterにリソースが追加される。
Driverファイルをウィザードの途中でダウンロードできるのがなんとも便利だなぁと思った。
次回はテーブル作成を行う。
といったところで、次回へ続く。
JavaEE 7をやってみよう。 SQLite/DBeaver その1
JavaEEのJPA機能、O/Rマッパーの機能を今後試してみる予定だが、
それにはDBがいる。
MySqlとかPostgreSQLとか都合の良いのがあるのだが、
仰々しいDBをインストールするのも気が引ける。
「なら、Java DBでいいじゃん」って思ったのだが、
OpenJDKを使っているので、インストールもされていない。
Apacheから取ってきて設定するのでは、
MySqlなんかを使うのと違いがなくなってしまい、メリットが薄い。
というわけで、
簡単に設定が済むSQLiteを使うことにした。
Ubuntuなら導入はコマンド一発で済む。
sudo apt-get install sqlite3
下記のサイトを情報源としたので、
詳しく知りたい人は下記のサイトを読むと良いと思う。
試した内容を以降に記載する。
- データベース作成/データベースを開く
- 指定ファイルがない場合、新規作成。(プログラム終了時にファイルが作られる)
sqlite3 <ファイル名>
- ヘルプを見る
- .helpを入力するとヘルプを見ることができる。
- 終了する
- .quitを入力するとSQLiteを終了できる。
テーブル作成とかクエリ発行なんかは、OracleのSQL+なんかと大差ないので割愛。
EclipseのプラグインからSQLiteを操作する方法について考えてみる。
といったところで、次回へ続く。