DIAVIS-wiki
hsqldbの使い方 ---- #contents ---- *HSQLDB - 100% Java SQL Database Engine [#n41ccf91] http://hsqldb.sourceforge.net/ hsqldb(旧 hypersonic SQL)とは,100%JavaによるSQLデータベースエンジン.RDB.単一のJARをクラスパスに通すだけで利用できる.HSQLにはGUIによるクライアントアプリケーションも用意されている. HSQLDBはいくつかの異なったモードで実行することができる.Server Modes and In-Process Mode (also called Standalone Mode). 各HSQLDB databaseは,同じディレクトリに置かれた,拡張子が異なる同じ名前を持った,2つから5つの間のファイルで構成される.例えば,testという名前のデータベースは以下のファイから構成される. *テーブル操作 [#l4fc181a] **テーブルの作成 CREATE [#w66c0f78] ***sample [#n8d280f3] CREATE TABLE TAGS ( ID IDENTITY, KEYWORDS VARCHAR, EVENT_ID INTEGER, DATE TIMESTAMP ); **データの追加 [#n0854623] ***サンプル [#s9550916] INSERT INTO image (URI) values ('JanTschichold.jpg'); **データの更新 [#td402509] ***サンプル [#q208ee30] 更新update tags set keywords = '" + tagsTextArea.getText() + "' where event_id = '"+ selectedEventID + "'; *** [#n1f02d14] :画像の追加|INSERT INTO image (URI) values ('JanTschichold.jpg') **削除 [#z867fef2] ***サンプル [#c8af8799] :画像名の変更|update image set URI = 'LovelaceAda.jpg' where id=4 :人物の画像IDの変更|update person set image_id = 37 where person_id=86 **テーブルの修正 [#gb65a7c8] ***コラムの追加 [#p8772f6c] ALTER TABLE DIARY ADD LINK VARCHAR ***コラムの削除 [#o3146c83] ALTER TABLE RECIPE DROP COLUMN STYLE; ***コラムの属性修正 [#b862e1e7] ALTER TABLE ITEMS ALTER COLUMN GUID VARCHAR *TIPS [#tec52e14] **検索結果の件数を知りたい [#l5113176] 検索文に以下のようにCOUNT(*)とすると,検索条件によって得られたレコードのカウント結果のみが入ったテーブルが返ってくる. なので,そのテーブルの一行目(rs.next()によって1行目にカーソルを移動)の一つ目のカラムから数値を読み取る. ResultSet rs; rs = mSQL.executeSQL("select COUNT(*) from keyword where keyword='" + keyword + "';"); int keyword_id = -1; try { rs.next(); int nResult = rs.getInt(1); select COUNT(*) from person where database = 4 **select [#w79d6c24] ***部分検索 [#q00d31e1] select * from person where database=0 and name like '%Hide%' order by name これだと大文字小文字を区別するので'hide'だと「Hideyoshi」が得られませんでした. 大文字小文字を関係なく検索したい. 以下のようにUPPER関数を利用して大文字にして,検索文字列のほうもJAVAで大文字にすれば出来そう. データベース内のデータは「Hideyoshi」だとした場合. select * from person where database=0 and UPPER(name) like '%HIDE%' order by name これはだめ select * from person where database=0 and UPPER(name) like '%Hide%' order by name ** [#t11f9961] :Timestamp format must be yyyy-mm-dd hh:mm:ss.fffffffff|ex. select * from items where date > '2006-11-25 12:00:00.0' order by date desc **BETWEEN条件 [#je925709] 値が指定した2つの値の間にあるか否かを比較. SELECT * FROM Orders WHERE CustomerID = 'QUICK' AND OrderDate BETWEEN '1996/1/1' AND '1997/12/31' ex. select * from items where date BETWEEN '2006-11-25 12:00:00.0' AND '2006-11-25 15:00:00.0' order by date desc **使用した構文 [#i4cd40c6] select * from keyword order by latest_appearance desc select * from keyword order by num desc, latest_appearance select * from keyword order by latest_appearance desc, num desc select * from items where date BETWEEN '2007-05-01 12:00:00.0' AND '2007-05-04 15:00:00.0' order by date desc SELECT COUNT(*) FROM IN_USE WHERE DATE BETWEEN '2007-05-01 12:00:00.0' AND '2007-05-04 15:00:00.0' AND KEYWORD_ID = 61517; SELECT COUNT(*) FROM IN_USE WHERE KEYWORD_ID = 61530; *Trigger [#vb5619ec] 情報元:http://d.hatena.ne.jp/lumber-mill/searchdiary?word=*%5Bhsqldb%5D データベーステーブルに対する何らかの操作(追加、更新、削除)をきっかけに起動する処理を登録できる。HSQLDBでは以下のようにJavaのクラスを直接指定する。 -- レコードの削除後に起動するトリガを登録 CREATE TRIGGER sample AFTER DELETE ON table CALL "info.lumber_mill.TriggerSample"; 登録するクラスはorg.hsqldb.Triggerインタフェースを実装していなければならない。 public class TriggerSample implements org.hsqldb.Trigger { public void fire(int type, String trigName, String tabName, Object oldRow, Object newRow) { // 起動したい処理を記述 } } 注意! 「CREATE TRIGGER ..」で登録するクラスが存在しなくても、どこにもエラーが出ません。ただ何も起動しなくなるだけです。スペルミスには気をつけよう…。 *参考(外部リンク) [#yc591cf8] :@IT 連載:SQL実践講座(1)|http://www.atmarkit.co.jp/fnetwork/rensai/sql01/sql1.html#4 :Project Amaterasというサイトのwiki内コンテンツ|http://amateras.sourceforge.jp/cgi-bin/fswiki/wiki.cgi/free?page=hsqldb :【見覚え】koichikのひとりごと【あります】|http://d.hatena.ne.jp/koichik/20040825#1093454572 :|CacCamのモデルの例を利用したDBの操作説明が載っている. :|http://d.hatena.ne.jp/lumber-mill/searchdiary?word=*%5Bhsqldb%5D |