[Adobe AIR]SQLiteでsqlite_masterにアクセスする
2012年5月28日月曜日
テーブルの情報とかいろいろはいってるsqlite_masterですが、Adobe AIRでこのテーブルにアクセスしても、「テーブルが見つからないよ!!」って言われてアクセス出来ないんですよね。
色々ググってみたところ、このテーブルへのアクセスは出来ないみたいで、代わりにSQLConnectionクラスの"loadSchema"と"getSchemaResult"を使って取得できるみたいです。
コードはこんな感じ。
var file = new air.File('app-storage:/test.sqlite');
var conn = new air.SQLConnection();
// スキーマ情報読み込み完了時に呼び出されるイベント
conn.addEventListener(air.SQLEvent.SCHEMA, function(event){
var schema = event.target.getSchemaResult();
for(var i = 0; i < schema.tables.length; i++){
var table = schema.tables[i];
air.trace('name: ' + table.name);
var columns = table.columns;
for(var j = 0; j < columns.length; j++){
var column = columns[j];
air.trace(' ' + column.name + ': ' + column.dataType);
}
air.trace('');
}
});
conn.addEventListener(air.SQLEvent.OPEN, function(e){
conn.loadSchema(); // スキーマの読み込み
});
conn.openAsync(file);
こんな感じで。
ちなみに、loadSchemaの第二引数にテーブル名を指定すると、そのテーブルだけの情報を取ってこれるみたいです。
conn.loadSchema(null, "userdata");
こんな感じで"userdata"というテーブルのデータだけを引っ張ってこれます。
第一引数はnullにしておきます。ActionScriptの場合はSQLTableSchemaを指定できるようですが、JavaScriptだと例外吐いて落ちました。
var schema = event.target.getSchemaResult();
var tables = event.target.getSchemaResult().tables;
こんなことやると残念なコトになります。一回のイベント内でgetSchemaResultを複数回呼ぶと詰むので、一度結果を変数に入れておいたほうがいいです。
loadSchemaの詳しいリファレンスはこちら。
http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/data/SQLConnection.html#loadSchema%28%29
0 件のコメント :
コメントを投稿