AIRのSQLite関連のソースをgoogle code上に乗せてみました。
まだまだ、未完成ですが・・・・
以前から使っていた、SQLiteのテーブルデータから、そのままDataGirdや、ListなどのdataProvidertとして使えるクラスを同期モードから非同期モードに作り替えてみました。
こんな感じに使えます。
import com.coltware.airxlib.db.collection.TableCollectionView;
:
public var list:TableCollectionView;
:
list = new TableCollectionView("project");
list.itemClass = ProjectModel; // SQLStatementのitemClassに設定されるクラスファイルを設定する
list.sqlConnection = table.sqlConnection; // SQLConnectionを設定する
list.start();
grid.dataProvider = list;
mxmlのサンプル
<mx:datagrid id="grid" width="95%" selectable="true" height="80%" paddingLeft="5"> <mx:columns> <mx:datagridcolumn headerText="ID" dataField="sysuid" sortable="true" width="100" /> <mx:datagridcolumn headerText="名称" dataField="title" sortable="true" /> <mx:datagridcolumn headerText="メモ" dataField="memo" sortable="true" /> <mx:datagridcolumn headerText="作成日" dataField="created_at" labelFunction="LabelUtil.date" sortable="true" width="120" /> <mx:datagridcolumn headerText="更新日" dataField="updated_at" labelFunction="LabelUtil.date" sortable="true" width="120"/> </mx:columns> </mx:datagrid>
とこれだけで、勝手に必要なデータをSELECTして表示します。
ソートもできます。(ただ、AdvancedDataGirdに対応していないのと、Tree構造にも対応していません。)
これ以外に、Flex:AIR SQLiteにXMLを使ってテーブルを作成するも、
パッケージ名を変えて公開しました。
こちらは、XMLファイルからSQLを作成し、そのテーブルを操作するクラスを作成します。
こちらと先ほどのTableCollectionViewを組み合わせると、そのクラスを通じてデータを更新すると、自動的にCollectionViewに対して変更イベントが発行されますので、
データがリフレッシュされるというように動くわけです。
以下のような処理をアプリケーションの起動時に実行しておきます。
public function startDb():void{
sqlconn = new SQLConnection();
sqlconn.addEventListener(SQLEvent.OPEN,hook_dbopen);
sqlconn.openAsync(file);
}
/**
* 必要なテーブルを設定するための処理
*/
private function hook_dbopen(event:SQLEvent):void{
var dbman:DBManager = DBManager.newInstance(sqlconn);
dbman.registerTable("table_uid","/xml/table.xml",ProjectTable);
}
そして、実際にデータを登録するときには
var table:ProjectTable = DBManager.getInstance().getTable("table_uid") as ProjectTable;
var item:Object = new Object();
item.title = "....";
:
table.insertItem(item);
みたいにすれば、データが登録できるという訳です。
ちなみに、”table_uid”という文字は何でもよくて、単に、TableオブジェクトをregisterTableで登録するときの名前で、
そのオブジェクトを後で、取得したいときのIDとして使います。
また、/xml/table.xmlは、table定義をXMLで定義したファイルで、今はソース上のパスに一致しています。
XMLの構造は、Flex:AIR SQLiteにXMLを使ってテーブルを作成すると基本的は変わっていません。
ちなみに、先ほどのTableCollectionViewのコンストラクタにこのtableを設定すれば、
この追加処理での変更イベントで、データが書き換わるというわけです。
じょじょに使い方を含めて公開しながら、更新していきたいと思います。


