關於本機 SQL 資料庫

Adobe AIR 1.0 以及更新的版本

如需使用 SQL 資料庫的快速說明與程式碼範例,請到 Adobe Developer Connection 參閱下列快速入門文章:

Adobe AIR 包含在執行階段中執行的 SQL 架構關聯式資料庫引擎,其資料儲存於執行 AIR 應用程式之電腦中的本機資料庫 (例如,在電腦硬碟中)。由於資料庫會在本機執行並在本機儲存資料檔案,不管是否連線到網路,資料庫都可以供 AIR 應用程式使用。因此,執行階段的本機 SQL 資料庫引擎提供了用來儲存永續本機應用程式資料的便利機制,如果您具有使用 SQL 和關聯式資料庫經驗,必定能感受到其方便之處。

本機 SQL 資料庫的用法

AIR 本機 SQL 資料庫功能可以用於您要在使用者的本機電腦上儲存應用程式資料的任何情況。Adobe AIR 包含多種可以在本機儲存資料的機制,每一種都有不同的優點。下列是 AIR 應用程式中本機 SQL 資料庫一些可能的用法:

  • 對於資料導向的應用程式 (例如通訊錄) 來說,資料庫可以用來儲存主應用程式資料。

  • 對於文件導向的應用程式來說,使用者可建立文件來儲存,也可以進行共用,每個文件都可以在使用者指定的位置儲存為資料庫檔案 (但請您注意,除非資料庫已經加密,否則任何 AIR 應用程式皆可開啟資料庫檔案。對於可能具有機密性的文件,建議使用加密)。

  • 對於能辨識網路的應用程式來說,資料庫可以用來儲存應用程式資料的本機快取,或在無網路連線可用時暫時儲存資料。您可以使用網路資料存放區,建立同步處理本機資料庫的機制。

  • 在任何應用程式中,資料庫可以用來儲存使用者的個人應用程式設定,例如視窗大小和位置等使用者選項或應用程式資訊。

關於 AIR 資料庫和資料庫檔案

個別 Adobe AIR 本機 SQL 資料庫會在電腦檔案系統中儲存為單一檔案。執行階段包含 SQL 資料庫引擎,可管理資料庫檔案的建立和結構組織,並從資料庫檔案操控及擷取資料。執行階段不會指定資料庫資料儲存在檔案系統中的方式和位置,而會將個別資料庫完全儲存在單一檔案之內。請在檔案系統中指定儲存資料庫檔案的位置。單一 AIR 應用程式可以存取一個或多個個別資料庫 (也就是,不同的資料庫檔案)。由於執行階段會在檔案系統中將每個資料庫儲存為單一檔案,因此,您可以依應用程式的設計及作業系統的檔案存取限制,找出所需的資料庫。每一個使用者都可以使用個別的資料庫來儲存他們的特定資料,或者,應用程式在單一電腦上的所有使用者都可以存取資料庫檔案以取得共用的資料。由於資料會儲存在單一電腦的本機上,因此,不會自動提供不同電腦的使用者進行共用。本機 SQL 資料庫引擎不提供任何針對遠端或伺服器資料庫執行 SQL 陳述式的功能。

關於關聯式資料庫

關聯式資料庫是在電腦上儲存 (及擷取) 資料的機制。資料會組織成資料表:列代表記錄或項目,而欄 (有時稱為「欄位」) 則將每筆記錄分成各個值。例如,通訊錄應用程式可以包含「朋友」資料表。資料表中的每個列都代表儲存在資料庫中的一個朋友。資料表的欄就代表資料,例如名字、姓氏、生日等等。針對資料表中的每個朋友列,資料庫會為每個欄儲存不同的值。

關聯式資料庫是針對儲存複雜資料所設計,當中的每一個項目都與其它類型的項目關聯或相關。在關聯式資料庫中,任何具備一對多關聯性的資料 (也就是,單一記錄可以與不同類型的多筆記錄相關) 都應該分別儲存於不同資料表中。例如,假設您要通訊錄應用程式為每個朋友儲存多個電話號碼,這就是一對多關聯性。此「朋友」資料表會包含每個朋友的所有個人資訊。另外一個「電話號碼」資料表則會包含所有朋友的所有電話號碼。

除了儲存有關朋友和電話號碼的資料之外,每個資料表都需要一段資料,來追蹤兩個資料表之間的關聯性,以便比對各個朋友的記錄及其電話號碼。這段資料就是主索引鍵,可以區別資料表中每個列與該資料表中其它列的唯一識別名稱。主索引鍵可以是「自然索引鍵」,意思是,它是可以自然地區分資料表中每一筆記錄的其中一個資料項目。在「朋友」資料表中,如果您知道沒有任何一個朋友的生日是相同的,就可以使用生日欄做為「朋友」資料表的主索引鍵 (自然索引鍵)。如果沒有自然索引鍵,就要另外建立主索引鍵欄,例如「朋友 ID」,這是任意設定的值,供應用程式用來區分各列。

您可以使用主索引鍵,設定多個資料表之間的關聯性。例如,假設「朋友」資料表有「朋友 ID」一欄,其中每個列 (每個朋友) 都包含唯一的號碼。相關的「電話號碼」資料表可以建立包含兩欄的結構:一個是電話號碼所屬朋友的「朋友 ID」,一個是實際的電話號碼。這樣,不管一個朋友有多少個電話號碼,全部都可以儲存在「電話號碼」資料表中,而可以使用「朋友 ID」主索引鍵連結到相關朋友。當一個資料表的主索引鍵會用於相關資料表中來指定記錄之間的關聯時,相關資料表中的值稱為外部索引鍵。與許多資料庫不同的是,AIR 本機資料庫引擎不允許您建立外部索引鍵限制,自動檢查插入或更新的外部索引鍵值在主索引鍵資料表中是否有對應的列。不過,外部索引鍵關聯性是關聯式資料庫結構的重要部分,而且在資料庫中的資料表之間建立關聯性時,應該要使用外部索引鍵。

關於 SQL

結構化查詢語言 (SQL) 可搭配關聯式資料庫使用,以操控及擷取資料。SQL 是描述式語言,而不是程序式語言。SQL 陳述式並不會提供電腦指示,告訴電腦應該如何擷取資料,而是描述您所要的一組資料。資料庫引擎會決定如何擷取該資料。

SQL 語言已經由美國國家標準局 (ANSI) 標準化。Adobe AIR 本機 SQL 資料庫支援大部分 SQL-92 標準。

如需 Adobe AIR 所支援之 SQL 語言的特定說明,請參閱 本機資料庫內的 SQL 支援

關於 SQL 資料庫類別

若要在 ActionScript 3.0 中使用本機 SQL 資料庫,請使用 flash.data 套件中下列類別的實體:

類別

說明

flash.data.SQLConnection

提供可建立及開啟資料庫 (資料庫檔案) 的工具,也提供方法可執行資料庫層級作業及控制資料庫交易。

flash.data.SQLStatement

代表在資料庫上執行的單一 SQL 陳述式 (單一查詢或命令),包括定義陳述式文字及設定參數值。

flash.data.SQLResult

提供取得執行陳述式相關資訊或結果的方式,例如 SELECT 陳述式的結果列、受 UPDATE DELETE 陳述式影響的列數目等等。

若要取得描述資料庫結構的資料結構資訊,請使用 flash.data 套件中的下列類別:

類別

說明

flash.data.SQLSchemaResult

做為呼叫 SQLConnection.loadSchema() 方法所產生的資料庫資料結構結果之容器。

flash.data.SQLTableSchema

提供描述資料庫中單一資料表的資訊。

flash.data.SQLViewSchema

提供描述資料庫中單一檢視的資訊。

flash.data.SQLIndexSchema

提供描述資料庫中資料表或檢視之單一欄的資訊。

flash.data.SQLTriggerSchema

提供描述資料庫中單一觸發程序的資訊。

flash.data 套件中的其它類別會提供搭配 SQLConnection 類別和 SQLColumnSchema 類別所使用的常數:

類別

說明

flash.data.SQLMode

定義一組常數,代表 SQLConnection.open() SQLConnection.openAsync() 方法的 openMode 參數的可能值。

flash.data.SQLColumnNameStyle

定義一組常數,代表 SQLConnection.columnNameStyle 屬性的可能值。

flash.data.SQLTransactionLockType

定義一組常數,代表 SQLConnection.begin() 方法的選項參數之可能值。

flash.data.SQLCollationType

定義一組常數,代表 SQLColumnSchema.defaultCollationType 屬性以及 SQLColumnSchema() 建構函式的 defaultCollationType 參數的可能值。

此外,flash.events 套件中的下列類別會代表您使用的事件 (和支援的常數):

類別

說明

flash.events.SQLEvent

定義 SQLConnection 或 SQLStatement 實體在其任何作業成功執行後傳送的事件。SQLEvent 類別中定義了每項作業的關聯事件類型常數。

flash.events.SQLErrorEvent

定義 SQLConnection 或 SQLStatement 實體在其任何作業產生錯誤時傳送的事件。

flash.events.SQLUpdateEvent

當連線的其中一個資料庫內資料表資料因為執行 INSERT UPDATE DELETE SQL 陳述式而變更時,定義 SQLConnection 實體傳送的事件。

最後,flash.errors 套件中的下列類別會提供有關資料庫作業錯誤的資訊:

類別

說明

flash.errors.SQLError

提供有關資料庫作業錯誤的資訊,包括正在嘗試的作業以及失敗的原因。

flash.errors.SQLErrorOperation

定義一組常數,代表 SQLError 類別的 operation 屬性之可能值,指出產生錯誤的資料庫作業。

關於同步和非同步執行模式

當您撰寫程式碼來使用本機 SQL 資料庫時,需要從兩個執行模式中指定一個模式以執行資料庫作業:非同步或同步執行模式。本節中的程式碼範例會示範如何以這兩種方式執行每一項作業,讓您能夠選擇最適合您需求的範例。

在非同步執行模式中,您需要對執行階段下達指示,然後執行階段會在您要求的作業完成或失敗時傳送事件。首先,請指示資料庫引擎執行作業。在應用程式繼續執行的同時,資料庫引擎會在背景中進行工作。最後,當作業完成 (或失敗) 時,資料庫引擎會傳送事件。事件會觸發您的程式碼,執行後續作業。這種做法有一項重大的優點:在主應用程式碼繼續執行的同時,執行階段會在背景中執行資料庫作業。如果資料庫作業明顯耗費相當長的時間,應用程式會繼續執行。最重要的是,使用者可以繼續與應用程式互動,而螢幕畫面並不會凍結。不過,非同步作業程式碼可能會比撰寫另一種程式碼更複雜。這種複雜度通常會發生在多個相依作業必須分成各種不同事件偵聽程式方法的情況。

就概念上來說,將作業撰寫成單一步驟順序 (也就是一組同步作業) 的程式碼,而不是分成多個事件偵聽程式方法的一組作業,會比較簡單。除了非同步資料庫作業以外,Adobe AIR 也可以讓您以同步方式執行資料庫作業。在同步執行模式中,作業不會在背景中執行,而會跟其它所有應用程式程式碼在相同的執行順序中執行。請指示資料庫引擎執行作業。接著,程式碼會在資料庫引擎進行工作時暫停。當作業完成之後,就會繼續執行程式碼的下一行。

作業要以非同步方式或同步方式執行,會在 SQLConnection 層級上設定。使用單一資料庫連線,您就無法以同步方式執行一些作業或陳述式,同時又以非同步方式執行其它作業或陳述式。您可以呼叫 SQLConnection 方法來開啟資料庫,指定 SQLConnection 應在同步或非同步執行模式中執行作業。如果您呼叫 SQLConnection.open() ,則連線會在同步執行模式中執行作業;如果您呼叫 SQLConnection.openAsync() ,則連線作業會在非同步執行模式中執行作業。一旦 SQLConnection 實體使用 open() openAsync() 連線至資料庫之後,就會固定以同步或非同步執行模式作業,除非您關閉並重新開啟資料庫連線。

每一種執行模式都各有優點。雖然每一種模式的大多很類似,但是在各模式中工作時,還是需要注意當中的一些差異。如需有關這些主題的詳細資訊,以及使用各模式的建議,請參閱 使用同步和非同步資料庫作業