2012年2月23日木曜日

Adobe AIRでSQLite


Flash CS5.5/Adobe AIRでSQliteを使用します。
今回はスマートフォン向けに開発しているので、Android・iPhone環境を意識します。

iPhoneでは保存場所のルールができたようで、kamijo氏のエントリーを参考にしました。
iOS データ保管ガイドラインの変更と Adobe AIR への影響



0,準備


  • 書き出し設定がAIRになってるか確認
  • DBの保存場所を作成。
    apkが書き出されるフォルダの一つ上に"Library/Caches"フォルダを作成
  • メンバ変数
    public var dbConnect:SQLConnection;


1,データベースを開く(初回は作成する)

var str:String = File.applicationDirectory.nativePath;
var cacheDir:File = new File(str + "/\.\./Library/Caches");
//var tempDir:File = new File(str + "/\.\./tmp");

var dbFile:File = new File(cacheDir.url + "/dbName.db");
dbConnect = new SQLConnection();
dbConnect.addEventListener(SQLEvent.OPEN, comp);
dbConnect.open(dbFile);

function comp(e:SQLEvent):void {
var statement:SQLStatement = new SQLStatement();
 dbConnect.removeEventListener(SQLEvent.OPEN, comp);
 statement.sqlConnection = dbConnect;
 statement.text=
  "CREATE TABLE IF NOT EXISTS tableName (" +
  " no INTEGER PRIMARY KEY,"+
  " name TEXT"+
 ")";
 statement.addEventListener(SQLEvent.RESULT, function(e:SQLEvent):void {trace(SQLEvent.RESULT)});
 statement.addEventListener(SQLErrorEvent.ERROR, function(e:SQLErrorEvent):void{trace(SQLErrorEvent.ERROR)});
 statement.execute();
}

2,レコードを挿入

public function addRecord(name:String):void {  
 var statement:SQLStatement = new SQLStatement();
 statement.sqlConnection = dbConnect;
 statement.text=
  "INSERT INTO tableName (no, name)" +
  " VALUES (Null," + 
  "'"+ name +"')"
 statement.addEventListener(SQLEvent.RESULT, function(e:SQLEvent):void{trace(SQLEvent.RESULT)});
 statement.addEventListener(SQLErrorEvent.ERROR, function(e:SQLErrorEvent):void{trace(SQLErrorEvent.ERROR)});
 statement.execute();
}

3,レコードを取得

public function getRecord(index:uint,length:uint ):void {
 var statement:SQLStatement = new SQLStatement();
 statement.sqlConnection = dbConnect;
 statement.text = "SELECT * FROM tableName LIMIT "+index+" , "+length+" ;";

 statement.addEventListener(SQLEvent.RESULT, function(e:SQLEvent):void {
  trace(SQLEvent.RESULT)
  var result:Array = statement.getResult().data;
  for (var i in result) {
   trace(i+"="+result[i]);
  }
  });
 statement.addEventListener(SQLErrorEvent.ERROR, function(e:SQLErrorEvent):void{trace(SQLErrorEvent.ERROR)});

 statement.execute();
}

0 件のコメント:

コメントを投稿