2008/03/08

AIRからSQLiteを使用する

AIRでは「flash.data」パッケージのクラスを使用するとSQLiteというデータベースを使用することができます。

JavaのJDBCを使用した経験があれば、すぐに理解できると思います。(非同期なことを除けば)

簡単なサンプルを作成したので掲載します。このサンプルではSQLiteのデータベースにアクセスしてテーブルのデータを取得し、グリッドコンポーネントに表示しています。


<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" applicationComplete="applicationCompleteEventHandle()">

<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.controls.Alert;

private var conn:SQLConnection;
private var stmt:SQLStatement;

private function applicationCompleteEventHandle():void {

var dbFile:File
= File.applicationStorageDirectory.resolvePath("local.db");

conn = new SQLConnection();

conn.addEventListener(SQLEvent.OPEN, databaseOpenEventHandle);
conn.addEventListener(SQLErrorEvent.ERROR, databaseOpenErrorEventHandle);

conn.open(dbFile);
}

private function closeEventHandle():void {

if (conn != null) {
conn.close();
}
}

private function databaseOpenEventHandle(event:SQLEvent):void {
readCustomerData();
}

private function databaseOpenErrorEventHandle(event:SQLErrorEvent):void {
Alert.show("データベースに接続できませんでした。", "データベース");
}

private function readCustomerData():void {

stmt = new SQLStatement();
stmt.sqlConnection = conn;
stmt.text = "SELECT ID, NAME, ADDRESS FROM CUSTOMERS";

stmt.addEventListener(SQLEvent.RESULT, queryExecuteResultEventHandle);
stmt.addEventListener(SQLErrorEvent.ERROR, queryExecuteErrorEventHandle);

stmt.execute();
}

private function queryExecuteResultEventHandle(event:SQLEvent):void {

var result:SQLResult = stmt.getResult();

var dataSource:ArrayCollection = new ArrayCollection();

for (var i:int = 0; i < result.data.length; i++) {

var obj:Object = new Object();
obj["id"] = result.data[i]["ID"];
obj["name"] = result.data[i]["NAME"];
obj["address"] = result.data[i]["ADDRESS"];
dataSource.addItem(obj);
}

customersGrid.dataProvider = dataSource;
}

private function queryExecuteErrorEventHandle(event:SQLErrorEvent):void {
Alert.show("SQL実行時にエラーが発生しました。", "データベース");
}

]]>
</mx:Script>
<mx:VBox y="0" height="100%" width="100%" x="0" verticalGap="0">
<mx:Canvas width="100%" height="100%">
<mx:DataGrid id="customersGrid" width="95%" height="95%" horizontalCenter="0" verticalCenter="0">
<mx:columns>
<mx:DataGridColumn headerText="顧客番号" dataField="id"/>
<mx:DataGridColumn headerText="顧客名" dataField="name"/>
<mx:DataGridColumn headerText="住所" dataField="address"/>
</mx:columns>
</mx:DataGrid>
</mx:Canvas>
</mx:VBox>

</mx:WindowedApplication>


■実行結果


SQLiteのデータベースファイルを指定する際に「File.applicationStorageDirectory」を使用しています。これはWindowsXPでは「Documents And Settings/ユーザ名/ApplicationData/アプリケーション名/Local Data」を指しているようです。

そのうちAdobe AIR用のO/Rマッピングソフトが流行りそうですね。(もう存在するのでしょうか?)

ラベル: ,

0 件のコメント :

コメントを投稿

この投稿へのリンク :

リンクを作成

<< ホーム