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という名前のデータベースは以下のファイから構成される.
 
 *SELECT [#ae5c3057]
 **取得数の制限 [#g7420d2e]
  SELECT LIMIT n m * FROM tablename;
  n 開始位置 
  m 長さ 
 
 
 *テーブル操作 [#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 ..」で登録するクラスが存在しなくても、どこにもエラーが出ません。ただ何も起動しなくなるだけです。スペルミスには気をつけよう…。
 
 
 
 *INNER JOIN と GROUP BY [#t78009fd]
  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 * FROM KEYWORD WHERE LATEST_APPEARANCE BETWEEN '2007-04-30 12:38:45.734' AND '2007-05-04 12:38:45.734' ORDER BY LATEST_APPEARANCE DESC
  SELECT COUNT(*) FROM IN_USE WHERE KEYWORD_ID = 61530;
 
 47732	23	2	未知語	2007-05-04 00:00:00.0
 
 
 ■A.	指定期間内における各キーワードごとの出現数のカウント結果
  SELECT KEYWORD_ID,count(*) AS NUM FROM IN_USE where date BETWEEN '2007-05-01 00:00:00.0' AND '2007-05-09 00:00:00.0' GROUP BY KEYWORD_ID ORDER BY NUM DESC
 
 ■B.	Aでつくったテーブルに対して条件を加えさらにSELECTする場合
  SELECT * FROM (SELECT KEYWORD_ID,count(*) AS NUM FROM IN_USE WHERE  DATE BETWEEN '2007-05-01 00:00:00.0' AND '2007-05-09 00:00:00.0'  GROUP BY KEYWORD_ID ORDER BY NUM DESC) WHERE NUM >= 2 ORDER BY NUM DESC
 
 ■IN_USEテーブルのKEYWORD_IDを使って,KEYWORDテーブルの項目(キーワード文字列)も結合して表示する
 ・結合のみ
  SELECT KEYWORD_ID, KEYWORD FROM IN_USE inner join KEYWORD on IN_USE.KEYWORD_ID = KEYWORD.ID
 
 ・日付の期間指定
  SELECT KEYWORD_ID,count(*),KEYWORD AS NUM FROM (SELECT KEYWORD_ID, KEYWORD FROM IN_USE inner join KEYWORD on IN_USE.KEYWORD_ID = KEYWORD.ID WHERE  DATE BETWEEN '2007-05-01 00:00:00.0' AND '2007-05-09 00:00:00.0') GROUP BY KEYWORD_ID
 
 
 ・結合 & カウント( 文字列表示 )
  SELECT KEYWORD_ID,KEYWORD,count(*) AS NUM FROM (SELECT KEYWORD_ID, KEYWORD FROM IN_USE inner join KEYWORD on IN_USE.KEYWORD_ID = KEYWORD.ID WHERE  DATE BETWEEN '2007-05-01 00:00:00.0' AND '2007-05-09 00:00:00.0') GROUP BY KEYWORD_ID,KEYWORD
 
 ・完成(さらに条件を絞る)
  SELECT * FROM (SELECT KEYWORD_ID,KEYWORD,count(*) AS NUM FROM (SELECT KEYWORD_ID, KEYWORD FROM IN_USE inner join KEYWORD on IN_USE.KEYWORD_ID = KEYWORD.ID WHERE  DATE BETWEEN '2007-05-01 00:00:00.0' AND '2007-05-09 00:00:00.0') GROUP BY KEYWORD_ID,KEYWORD) WHERE NUM >= 2 ORDER BY NUM DESC
 
 
 
 
 *参考(外部リンク) [#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
 :|http://www.pursue.ne.jp/jouhousyo/SQLDoc/table_betumei.html
 
 
トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS