Adobe AIR中使用Flex串連Sqlite資料庫(1)(建立資料庫和表,以及同步和非同步執行模式)

來源:互聯網
上載者:User

標籤:blog   http   io   ar   使用   sp   java   strong   on   

系列文章導航
  1. Adobe AIR中使用Flex串連Sqlite資料庫(1)(建立資料庫和表)
  2. Adobe AIR中使用Flex串連Sqlite資料庫(2)(添加,刪除,修改以及語句參數)
  3. Adobe AIR中使用Flex串連Sqlite資料庫(3)(查詢)
  4. Adobe AIR中使用Flex串連Sqlite資料庫(4)(事務)
  5. Flex,Fms3相關文章索引
  6. Fms3和Flex打造線上群組視訊會議和視訊交談(附原代碼)
  7. 免費美女視訊交談,群組視訊會議功能加強版本(Fms3和Flex開發(附源碼))

 

本章主要總結關聯式資料庫引擎(sqlite),同步和非同步執行模式,建立資料庫和表

 

Adobe AIR 包括一個基於 SQL 的關聯式資料庫引擎(sqlite),該引擎在運行時中運行,資料以本地方式儲存在運行 AIR 應用程式的電腦上的資料庫檔案中(例如,在電腦的硬碟上)。由於資料庫的運行和資料檔案的儲存都在本地進行,因此,不管網路連接是否可用,AIR 應用程式都可以使用資料庫。
單個 Adobe AIR 本地 SQL 資料庫作為單個檔案儲存體在電腦的檔案系統中。運行時包括 SQL 資料庫引擎,該引擎管理資料庫檔案的建立和結構化以及操作和檢索資料庫檔案中的資料。運行時不指定在檔案系統上儲存資料庫資料的方式或位置;相反,每個資料庫完全儲存在單個檔案中。您指定在檔案系統中儲存資料庫檔案的位置。單個 AIR 應用程式可以訪問一個或多個單獨的資料庫(即單獨的資料庫檔案)。由於運行時將每個資料庫作為單個檔案儲存體在檔案系統上,因此可以在需要時按照應用程式的設計和作業系統的檔案訪問約束尋找您的資料庫。每個使用者都可以具有其特定資料的單獨資料庫檔案,或者資料庫檔案可以由在單個電腦上共用資料的所有應用程式使用者訪問。由於資料對單個電腦是本地的,因此在不同電腦上的使用者之間並不自動共用資料。本地 SQL 資料庫引擎未提供對遠端資料庫或基於伺服器的資料庫執行 SQL 陳述式的任何功能。

 

關於sqlite
關於SQLite的特性:
1. ACID事務 
2. 零配置 – 無需安裝和管理配置 
3. 儲存在單一磁碟檔案中的一個完整的資料庫 
4. 資料庫檔案可以在不同位元組順序的機器間自由的共用 
5. 支援資料庫大小至2TB 
6. 足夠小, 大致3萬行C代碼, 250K 
7. 比一些流行的資料庫在大部分普通資料庫操作要快 
8. 簡單, 輕鬆的API 
9. 包含TCL綁定, 同時通過Wrapper支援其他語言的綁定 
10. 良好注釋的原始碼, 並且有著90%以上的測試覆蓋率 
11. 獨立: 沒有額外依賴 
12. Source完全的Open, 你可以用於任何用途, 包括出售它 
13. 支援多種開發語言,C, PHP, Perl, Java, ASP.NET,Python

更詳細情況可以參考以下網站:
http://www.sqlite.org/
http://www.sqlite.com.cn/

 


本地 SQL 資料庫的用途
AIR 本地 SQL 資料庫功能可以用於將應用程式資料儲存在使用者的本機電腦上的任何目的。Adobe AIR 包括在本機存放區資料的幾種機制,各機制具有不同的優點。以下是本地 SQL 資料庫在 AIR 應用程式中的一些可能用途:
1.對於面向資料的應用程式(例如通訊錄),資料庫可以用於儲存主應用程式資料。
2.對於面向文檔的應用程式(使用者建立要儲存並可能共用的文檔),可以在使用者指定的位置將每個文檔另存新檔資料庫檔案。(但是,請注意,任何 AIR 應用程式都能夠開啟資料庫檔案,因此對於潛在敏感的文檔,建議使用單獨的加密機制。)
3.對於支援網路的應用程式,資料庫可以用於儲存應用程式資料的本機快取,或者在網路連接不可用時暫時儲存資料。可以建立一種將本機資料庫與網路資料存放區同步的機制。
4.對於任何應用程式,資料庫都可以用於儲存單個使用者的應用程式設定,例如使用者選項或應用程式資訊(如視窗大小和位置)。

 

關於同步和非同步執行模式
1.編寫代碼以處理本地 SQL 資料庫時,會指定以兩種執行模式之一執行資料庫操作:非同步或同步執行模式。通常,程式碼範例說明如何以這兩種方式執行每個操作,以便您可以使用最適合您需求的樣本。
2.在非同步執行模式中,為運行時提供一個指令,運行時將在請求的操作完成或失敗時調度事件。首先,通知數據庫引擎執行操作。在應用程式繼續啟動並執行同時,資料庫引擎在後台工作。最後,完成操作時(或者它失敗時),資料庫引擎調度事件。由事件觸發的代碼執行後續操作。此方法具有一個重要的優點:運行時在後台執行資料庫操作,同時主應用程式代碼繼續執行。如果資料庫操作花費大量的時間,則應用程式繼續運行。最重要的是,使用者可以繼續與其互動,而螢幕不會凍結。但是,與其它代碼相比,編寫非同步作業代碼可能更加複雜。在必須將多個相關的操作分配給各個事件接聽程式方法的情況下,通常會出現此複雜性。
3.從概念上說,將操作作為單個步驟序列(一組同步操作,而不是分到幾個事件接聽程式方法中的一組操作)進行編碼更為簡單。除了非同步資料庫操作外,Adobe AIR 還允許您同步執行資料庫操作。在同步執行模式中,操作不在後台運行。相反,它們以與所有其它應用程式代碼相同的執行序列運行。通知數據庫引擎執行操作。然後,代碼在資料庫引擎工作時暫停。完成操作後,繼續執行下一行代碼。
4.非同步還是同步執行操作是在 SQLConnection 層級上設定的。使用單個資料庫連接,無法同步執行某些操作或語句,同時非同步執行其它操作或語句。通過調用 SQLConnection 方法開啟資料庫,可以指定 SQLConnection 是在同步還是非同步執行模式下操作。如果調用 SQLConnection.open(),則串連在同步執行模式下操作;如果調用 SQLConnection.openAsync(),則串連在非同步執行模式下操作。使用 open() 或 openAsync() 將 SQLConnection 執行個體串連到資料庫後,除非先關閉再重新開啟到資料庫的串連,否則該執行個體將固定為同步或非同步執行模式。

 

建立資料庫
若要建立資料庫檔案,請首先建立 SQLConnection 執行個體。調用其 open() 方法在同步執行模式下開啟它,或者調用其 openAsync() 方法在非同步執行模式下開啟它。open() 和 openAsync() 方法用於開啟到資料庫的串連。如果傳遞的 File 執行個體引用 reference 參數(第一個參數)的不存在的檔案位置,則 open() 或 openAsync() 方法將在該檔案位置建立一個資料庫檔案,並開啟到新建立的資料庫的串連。
不管是調用 open() 方法還是 openAsync() 方法建立資料庫,資料庫檔案的名稱都可以是具有任何副檔名的任何有效檔案名稱。如果調用 reference 參數為 null 的 open() 或 openAsync() 方法,則將建立新的記憶體中資料庫,而不是在磁碟上建立資料庫檔案。

以下代碼清單說明使用非同步執行模式建立資料庫檔案(新資料庫)的過程,資料庫檔案儲存在應用程式的儲存目錄中,其檔案名稱為“myTestdb.db”:
import mx.controls.Alert;

private var con:SQLConnection;

private function initApp():void
{
 var file:File = File.applicationStorageDirectory.resolvePath("myTestdb.db")
 
 con = new SQLConnection();
 //在 openAsync() 方法叫用作業成功完成時調度
 con.addEventListener(SQLEvent.OPEN,openHandler);
 //SQLConnection 對象的非同步作業導致錯誤時調度
 con.addEventListener(SQLErrorEvent.ERROR,errorHandler);
 
 con.openAsync(file);
}

private function openHandler(evt:SQLEvent):void
{
 Alert.show("成功完成");
}

private function errorHandler(evt:SQLErrorEvent):void
{
 Alert.show("失敗");
 Alert.show(evt.error.message);
 Alert.show(evt.error.details);
}


要同步執行操作,請在使用 SQLConnection 執行個體開啟資料庫連接時,調用 open() 方法。以下代碼說明如何建立和開啟同步執行其操作的 SQLConnection 執行個體:
import mx.controls.Alert;

private var con:SQLConnection;

private function initApp():void
{
 var file:File = File.applicationStorageDirectory.resolvePath("myTestdb.db")
 
 con = new SQLConnection();
 
 try
 {
  con.open(file);
  Alert.show("成功完成");
 }
 catch(error:SQLError)
 {
  Alert.show(error.message);
  Alert.show(error.details);
 }
}

 

建立資料庫表
以下使用非同步執行模式在現有資料庫檔案中建立一個名為“emp”的表。
import mx.controls.Alert;

private var con:SQLConnection;
private var createStmt:SQLStatement;

private function initApp():void
{
 var file:File = File.applicationStorageDirectory.resolvePath("myTestdb.db")
 
 con = new SQLConnection();
 //在 openAsync() 方法叫用作業成功完成時調度
 con.addEventListener(SQLEvent.OPEN,openHandler);
 //SQLConnection 對象的非同步作業導致錯誤時調度
 con.addEventListener(SQLErrorEvent.ERROR,errorHandler);
 
 con.openAsync(file);
}

private function createResult(event:SQLEvent):void 

    Alert.show("表建立"); 
}

private function createError(event:SQLErrorEvent):void 

    Alert.show("Error message:", event.error.message); 
    Alert.show("Details:", event.error.details); 
}

private function openHandler(evt:SQLEvent):void
{
 Alert.show("成功完成");
 
 createStmt = new SQLStatement(); 
 createStmt.sqlConnection = con; 
 var sql:String =  
    "CREATE TABLE IF NOT EXISTS emp (" +  
    "    empId INTEGER PRIMARY KEY AUTOINCREMENT, " +  
    "    firstName TEXT, " +  
    "    lastName TEXT, " +  
    "    salary NUMERIC CHECK (salary > 0)" +  
    ")"; 
    
 createStmt.text = sql;
 createStmt.addEventListener(SQLEvent.RESULT, createResult); 
 createStmt.addEventListener(SQLErrorEvent.ERROR, createError); 
 createStmt.execute();  
}

private function errorHandler(evt:SQLErrorEvent):void
{
 Alert.show("失敗");
 Alert.show(evt.error.message);
 Alert.show(evt.error.details);
}


以下代碼使用同步執行模式在現有資料庫檔案中建立一個名為“emp”的表
import mx.controls.Alert;

private var con:SQLConnection;
private var createStmt:SQLStatement;

private function initApp():void
{
 var file:File = File.applicationStorageDirectory.resolvePath("myTestdb.db")
 
 con = new SQLConnection();
 createStmt = new SQLStatement();
 
 try
 {
  con.open(file);
  
   
  createStmt.sqlConnection = con; 
  var sql:String =  
     "CREATE TABLE IF NOT EXISTS emp (" +  
    "    empId INTEGER PRIMARY KEY AUTOINCREMENT, " +  
    "    firstName TEXT, " +  
    "    lastName TEXT, " +  
    "    salary NUMERIC CHECK (salary > 0)" +  
    ")"; 
    
 createStmt.text = sql;
 createStmt.execute();  
 
  Alert.show("成功完成");
 }
 catch(error:SQLError)
 {
  Alert.show(error.message);
  Alert.show(error.details);
 }
}  

 


代碼下載:
http://files.cnblogs.com/aierong/Air_Test_SQLite.rar

 

Adobe AIR中使用Flex串連Sqlite資料庫(1)(建立資料庫和表,以及同步和非同步執行模式)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.