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
***コラムの属性修正 [#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

*参考(外部リンク) [#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の操作説明が載っている.
トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS