2012-02-13,
hsqldb
/tips/java/hsqldb
*HSQLDB
いわずと知れたPure Javaデータベース。付加的な情報をここに記載して行きます。
-{link:http://hsqldb.org}
**長所
-高速。軽快。組み込みに向いている。
-Javaの静的関数をそのままエイリアスに登録して呼び出せる(詳細は後述)。
**短所
-「FULL JOIN」構文を持たない。
-「UPDATE」構文が単純。他テーブルの値を参照しながらの更新ができない。
-「SELECT .. INTO ..」構文を使うと、対象テーブル(入出力)を全てCACHEDにしているにも関わらずメモリ内で処理を進めようとし、「out of memory」エラーで落ちる。
***バグ?
テーブルのリネーム後、変更前のテーブルと同名のテーブルを作成できません。2006-1-19発見。
:CREATE TABLE a (id INTEGER);
:ALTER TABLE a RENAME TO b;
:CREATE TABLE a (id INTEGER); -- テーブルが生成されない!
**リンク
-{link:http://jamie.ideasasylum.com/notebook/index.php?id=4}{br}hsqldbとMySQLなどのベンチマーク
-{link:http://hsqldb.org}
**コマンドライン
サーバモードで起動する。
:$ java -cp lib/hsqldb.jar org.hsqldb.Server -database.0 database/mydb -dbname.0 mydb
,-database.X,データベースのパス
,-dbname.X,アクセスに利用する名前
***server.properties
起動フォルダに置いておくと読み込んでくれます。HSQLDBマニュアルに載っている記載例は間違っているので注意!
:server.port=9001
:server.database.0=test
:server.dbname.0=...
: ...
:server.database.n=...
:server.dbname.n=...
:server.silent=true
***shutdown
:$ java -cp lib/hsqldb.jar org.hsqldb. ??
**SqlTool
対話型コマンドラインインタフェース。HSQLDBのみならず様々なデータベースへのアクセスが可能(らしい)。
***sqltool.rc
(デフォルトでは)ホームディレクトリに置かれた「sqltool.rc」という名前のファイルから、接続設定を読み込みます。rcの書式サンプルは以下の通り。「#(シャープ)」で始まる行はコメントです。
:# A personal Memory-Only database.
:urlid mem
:url jdbc:hsqldb:mem:memdbid
:username sa
:password
***コマンド
***注意点
-更新クエリ発行後、COMMIT及びSHUTDOWNコマンドを打たないでツールを終了すると変更がロールバックされてしまう。
**エイリアスの登録
Javaのクラスに定義した静的メソッドをHSQLDBのクエリから呼び出して使うことができます。パッケージ修飾及びクラス名、関数名を指定して直接呼び出すこともできますが、エイリアス(別名)を登録しておけば、さらに便利に利用できます。
:package sample;
:
:class Functions\{
: public static int plus(int i,int j)\{
: return i+j;
: \}
:\}
:CREATE ALIAS plus FOR "sample.Functions.plus";
利用例:
:CALL plus(3,5) -- 結果:8
:CALL plus(NULL,10) -- 結果:NULL
利用例からも分かるように、プリミティブ型引数にNULLが渡されると、関数の処理自体がスキップされ、結果としてNULLを返します。また、可変長引数や配列は利用できませんが、メソッドのオーバーロードには対応可能です。
**システムテーブル一覧
,SYSTEM_ALIASES,the aliases defined within this database
,SYSTEM_ALLTYPEINFO,a description of all non user-defined data types known to this database and the level of support for them in various capacities
,SYSTEM_BESTROWIDENTIFIER,for each accessible table defined within this database\, the optimal set of visible columns that uniquely identifies a row
,SYSTEM_CACHEINFO,the current state of the system row caching mechanism
,SYSTEM_CATALOGS,the accessible catalogs defined within this database
,SYSTEM_CHECK_COLUMN_USAGE,one row for each column identified by a contained in the of a check constraint\, domain constraint\, or assertion.
,SYSTEM_CHECK_CONSTRAINTS,one row for each domain constraint\, table check constraint\, and assertion.
,SYSTEM_CHECK_ROUTINE_USAGE,one row for each SQL-invoked routine identified as the subject routine of either a \, a \, a \, or a contained in an \, a \, or a .
,SYSTEM_CHECK_TABLE_USAGE,one row for each table identified by a simply contained in a contained in the of a check constraint\, domain constraint\, or assertion.
,SYSTEM_CLASSPRIVILEGES,the visible user level access permissions for each Java class providing implementation for each accessible callable procedure\, SQL function\, trigger body and UDT method defined within this database
,SYSTEM_COLUMNPRIVILEGES,the visible user level access permissions of each visible column of each accessible table defined within this database
,SYSTEM_COLUMNS,the visible columns of each accessible table defined within this database
,SYSTEM_CROSSREFERENCE,a description of how the accessible tables defined within this database import visible columns to enforce referential integrity
,SYSTEM_INDEXINFO,information about the indicies of each accessible table defined within this database
,SYSTEM_PRIMARYKEYS,the visible columns of the primary key of each accessible table defined within this database
,SYSTEM_PROCEDURECOLUMNS,a description of the return type\, parameters and result columns of each accessible callable procedure\, SQL function\, trigger body and UDT method defined within this database
,SYSTEM_PROCEDURES,the procedures\, SQL functions\, trigger body routines and UDT methods defined within the database
,SYSTEM_PROPERTIES,the static and dynamic system properties and operating parameters of this database
,SYSTEM_SCHEMAS,the accessible schemas defined within this database
,SYSTEM_SEQUENCES,one row for each external sequence generator
,SYSTEM_SESSIONINFO,information about the current database session
,SYSTEM_SESSIONS,the visible sessions open in this database
,SYSTEM_SUPERTABLES,the table hierarchies defined in this database. Only the immediate super type/sub type relationship is modeled
,SYSTEM_SUPERTYPES,the user-defined type (UDT) hierarchies defined in this database. Only the immediate super type/sub type relationship is modeled
,SYSTEM_TABLEPRIVILEGES,the visible user level access permissions for each accessible table defined within this database
,SYSTEM_TABLES,the accessible tables defined within this database
,SYSTEM_TABLETYPES,the types of tables that can be created/found within this database
,SYSTEM_TABLE_CONSTRAINTS,one row for each table constraint associated with a table
,SYSTEM_TEXTTABLES,the data source descriptors of the accessibleTEXT TABLE objects defined within this database
,SYSTEM_TRIGGERCOLUMNS,the column usage of visible triggers defined within this database
,SYSTEM_TRIGGERS,the visible triggers defined within this database
,SYSTEM_TYPEINFO,a description of predefined table column data types known to this database
,SYSTEM_UDTATTRIBUTES,a description of the attributes of the user-defined types (UDTs) that are available in this database
,SYSTEM_UDTS,the user-defined types that are available within this database
,SYSTEM_USAGE_PRIVILEGES,one row for each usage privilege descriptor.
,SYSTEM_USERS,users defined within this database
,SYSTEM_VERSIONCOLUMNS,the visible columns of the accessible tables that are automatically updated when any value in a row is updated
,SYSTEM_VIEWS,the view descriptors of the accessible views defined within this database
,SYSTEM_VIEW_COLUMN_USAGE,one row for each column of a table that is explicitly or implicitly referenced in the of the view being described.
,SYSTEM_VIEW_ROUTINE_USAGE,one row for each SQL-invoked routine identified as the subject routine of either a \, a \, a \, or a contained in a
,SYSTEM_VIEW_TABLE_USAGE,one row for each table identified by a simply contained in a that is contained in the of a view