SQLiteでテーブルのカラムを取得する?
舐め回すようにリファレンスを読んでやっとわかった.
SQLConnectionにloadSchemaというメソッドがあるのでこれを使う.
このメソッドは、接続されているデータベースまたはアタッチされている任意のデータベースからスキーマ情報をロードします。 スキーマは、データベースのテーブル、列、インデックスおよびトリガの構造を示すものです。 ロードされているスキーマにアクセスするには、SQLConnection.getSchemaResult() メソッドを使用します。 非同期実行モードでは、処理が正しく完了すると schema イベントが送出され、処理が失敗すると error イベントが送出されます。
説明に↑のようなことがかかれているので,addEventListenerでSQLEvent.SCHEMAイベントを追加(とりあえず試すだけなので他のは省略).
で,openしたらloadSchemaメソッドを呼ぶ.でもってschemaHandlerを書く.SQLConnection.getSchemaResultメソッドは
public function getSchemaResult():SQLSchemaResult
のようになっているので,戻り値はSQLSchemaResult.で,SQLSchemaResultの説明を見ると,
SQLSchemaResult インスタンスには、SQLConnection.loadSchema() メソッドを呼び出した結果の情報が含まれます。 このインスタンスには、SQLConnection.loadSchema() の呼び出しで使用された引数値に基づき、要求されたスキーマデータを保持する 4つの Array プロパティが含まれます。
となっていて,その4つのプロパティはindices,tables,triggers,views.欲しいのはtablesなので今度はtablesの説明を見る.
SQLTableSchema インスタンスの配列(SQLConnection.loadSchema() の呼び出しで要求)です。
となっているので,今度はSQLTableSchemaの説明をみる.
SQLTableSchema インスタンスは、データベースの特定のテーブルを示す情報を提供します。 このインスタンスには、テーブルの名前(name プロパティ)、テーブルの作成に使用された SQL ステートメント(sql プロパティ) およびテーブルの列に関する情報(columns プロパティ)が含まれます。
カラムに関する情報が欲しいので,columnsプロパティの説明を見ると,
このテーブルの列のスキーマ情報を含むSQLColumnSchemaインスタンスの配列です。
となっているので,SQLColumnSchemaを見てみる.nameプロパティで,列の名前を取得できるらしい.
ということでやっとたどり着いた.で,上の流れをプログラムで書くと,↓みたいになると思う.
import flash.data.*; //〜〜〜〜省略〜〜〜〜 var conn:SQLConnection = new SQLConnection(); conn.addEventListener(SQLEvent.SCHEMA, schemaHandler); conn.open(file); conn.loadSchema(); //〜〜〜〜省略〜〜〜〜 private function schemaHandler(event:SQLEvent):void { var schema:SQLSchemaResult = event.target.getSchemaResult(); for (var i : String in schema.tables[0].columns) { trace(schema.tables[0].columns[i].name); } }
loadSchemaで指定のテーブルの情報だけ拾えるみたいなことをかいてあるので,もうちょっと調べる.
追記
conn.loadSchema(SQLTableSchema, "tablename");
のように指定すると,そのテーブルの情報だけ拾える.詳しくはloadSchemaのパラメータのところ参照.