2012年5月29日 星期二

[教學] Adobe AIR 連結SQLite 資料庫

Adobe AIR 內建SQLite 引擎, 我們建立離線資料庫(Database), 以SQL 陳述式查詢和更新. 作為iOS 和Android 的本機資料庫, SQLite 是一個好選擇.

使用SQLite 需要以下三個內建類別完成:
  • SQLConnection - 管理本機 SQL 資料庫檔案 (本機資料庫) 的建立與連線
  • SQLStatement - 執行 SQL 陳述式物件
  • SQLEvent - 傳送SQL 事件的物件



查詢SQLite
 
加入新數據

以下是使用SQLite 的查詢步驟:
  1. 建立資料庫連線:
    var file:File = File.applicationStorageDirectory.resolvePath("user.db");
    var conn:SQLConnection = new SQLConnection();
    conn.addEventListener(SQLEvent.OPEN, openHandler);
    conn.open(file);
    
  2. 連線成功後,  執行 SQL 陳述式:
    private function openHandler(event:SQLEvent):void{
      var statement:SQLStatement = new SQLStatement();
      statement.sqlConnection = conn;
      statement.text = "SELECT name, birthday FROM tbUser";
      statement.addEventListener(SQLEvent.RESULT, resultHandler);
      statement.execute();
    }
    
  3. 讀取數據:
    private function resultHandler(event:SQLEvent):void{
      var statement:SQLStatement = event.target as SQLStatement;
      var data:Array = statement.getResult().data;
      for(var i:int=0; i<data.length; i++)
       trace("name:" + data[i].name + ", birthday:" + data[i].birthday);
    }
    

除了作本機資料庫, 我們可以製作一些機制, 定時同步(Synchronize) 伺服器的資料庫數據, 使本機內容更新. 作者製作一個簡單範例, 實作CREATE TABLEINSERT INTO SELECT 等SQL 陳述式, 幫助了解SQLite 在Adobe AIR 的運作方式.

大家可以 [下載] 範例試試看.

參考資料: http://www.slideshare.net/peterelst/introduction-to-sqlite-in-adobe-air-1627545

若製作過程, 想了解"user.db" 的內容與結構, 我們可以使用免費的SQLite Expert Personal 來解讀SQLite 檔案.
在Windows 運行Flash Builder 會在 "C:\Users\USER_NAME\AppData\Roaming\SQLite.test01.debug\Local Store\" 找到"user.db" 這個檔案.

8 則留言:

匿名 提到...

請問如何將輸入的資料做刪除的動作

Turtler 提到...

十分簡單, 與select, insert, update 等動作很相近:
DELETE FROM tbUser WHERE name="Tom"

有興趣SQL 可參與以下連結:
http://www.w3schools.com/sql/sql_delete.asp

匿名 提到...

請問如何存取圖片

Turtler 提到...

簡單載入圖片範例, 可以試試下載參考:
http://flash-adobe.blogspot.hk/2012/03/image-video-html-swf-text.html

阿吉 提到...

請問用桌上型電腦 flash cs6製作 air for android時 user.db 應置於何處才會讀得到。完成檔(運用到sqlite)發布至手機時有特別的設定嗎?

Turtler 提到...

1. 在AIR for Android Settings -> Included files 加入user.db 檔案.
2. 利用copyTo 把user.db 檔案複製至applicationStorageDirectory 內.

複製方法請參考以下:
function copyFile(folderName:String, indexName:String, once:Boolean = true):String {
var source:File = File.applicationDirectory.resolvePath(folderName);
var destination:File = File.applicationStorageDirectory;
if (!destination.resolvePath(indexName).exists || !once)
source.copyTo(destination, true);
return "file://" + destination.resolvePath(indexName).nativePath;
}

3. 讀取applicationStorageDirectory 被複製的user.db 檔案.
var file:File = File.applicationStorageDirectory.resolvePath("user.db");

## 透過Flash 的Included files 內嵌檔案, 會被存放於applicationDirectory 內, 但其內容不能新增, 更改或刪除. 我們需要複製一份至applicationStorageDirectory 內, 才給程序調用.

匿名 提到...

請問範例怎麼打開??

Turtler 提到...

是透過Adobe Flash Builder 打開.