API version 9
iOSAndroidWindows
|
|||
|
|
|
|
|
LocalDB |
||
|
|||
ローカルDBの本体となるクラスで、SQLite3データベースを操作する機能を提供します。
データ型、型変換規則、構文、その他各種概念はSQLite3のものに準じます。
開くときにモードを指定し、書き込み可能なときにファイルが存在していなければ、自動的に新たに作成します。
ファイルを作成することができない、ロックされている等の理由により開けなければ、例外をスローします。
データベースへの変更操作が反映されない等の問題を起こす可能性があるため、LocalDBオブジェクトは使用後は必ずcloseメソッドを呼んでクローズしてください。
デフォルトでは、データベースは自動コミットモードがオンの状態で動作します。つまり、データベースの変更操作は即座に反映され、永続化されます。この操作はロールバックできません。
トランザクションを行いたい場合はbegin, commit, rollbackメソッドを使用します。
トランザクション中にLocalDBオブジェクトが削除された場合、未コミット状態なら自動的にロールバックします。
CRSの各型の値は、データベース型に応じて適切に変換されます。
SQLite3データベースの型とCRSの型は下記のように対応づけて変換されます。
CRS型 |
SQLite型 |
---|---|
整数 |
INT |
文字列 |
TEXT |
Number |
REAL |
null |
NULL |
ByteArray |
BLOB |
SQLite3には日付時刻型に対応するデータベース型が存在しないため、日付や時刻はいずれかの型にあわせて変換する必要があります。
一般的には下記の方法を選択し、日付や時刻型をデータベース上で表現します。
SQLite3ではデータベースで使用可能な型のほかに、他のデータベースマネジメントシステムで使用可能な型を指定することができます。その場合、指定された型はSQLite3のいずれかの型に置き換えて用いられます。
たとえば、varchar(255)を型として指定した場合は、TEXT型が指定されたものとして見なします。
その場合、その型の列には256文字以上の文字を指定することができます。
Dateオブジェクトを直接LocalDBStatement.bindメソッドに指定した場合は、CRSにおいてDateオブジェクトを文字列に変換したものとして扱います。
この文字列はISO8601形式のフォーマットではないことに注意してください。
SQLiteは、性質上カラム型と異なる型のデータを格納することができます。このため、ある型のカラムから取得したデータが必ずその型の値であるとは限らないことに注意して下さい。
LocalDBクラスは暗号化されたデータベースファイルを開いて操作したり新たに作成したりすることができます。
これにより、よりセキュアにデータベースにアクセスすることができ、データの改ざんや盗聴を防止できます。
なお、暗号化を解除したり、逆に暗号化されていないデータベースファイルを新たに暗号化することはできません。
暗号化されたデータベースファイルを開く、および新たに作成する場合はコンストラクタ引数に暗号化キーを指定します。
下記の指定の場合、暗号化されたデータベースファイルを暗号化キー「1234」で開きます。データベースファイルが存在しない場合は、新たにデータベースファイルを作成します。
var db = new LocalDB(new FileSystem(), "testdb.sqlite", LocalDB.OPEN_READWRITE, "1234");
データベースファイルはBiz/Browser SmartDevice(iOS, Android, Windows)の他、SQLite3をサポートする各種ソフトウェアと互換性があり、相互に開くことができます。
ただし、暗号化されたデータベースファイルの場合は、wxSQLite(AES-128)版の暗号化がサポートされた各種ソフトウェア以外では互換性がなくなり、開くことができなくなることに注意して下さい。
いくつかの各データの参照方法が用意されており、LocalDBStatementクラスを使用することで全件一括でCSV形式で取得するオペレータも用意されています。
これにより、指定条件にて全件のレコードを取得し表形式で表示可能なデータであれば、非常に簡単な操作で取得することができます。
特別に制御が必要でなければシンプルに記述することができます。
var st = db.createStatement("select * from testtable"); var records = new CSVDocument(); ^.FlexView1 << records << st; /* FlexView ← CSVDocument ← 全件データ */