連線到資料庫

Adobe AIR 1.0 以及更新的版本

在您能夠執行任何資料庫作業之前,必須先開啟資料庫檔案的連線。SQLConnection 實體會用來代表一或多個資料庫的連線。使用 SQLConnection 實體進行連線的第一個資料庫稱為「主」資料庫。這個資料庫會使用 open() 方法 (適用於同步執行模式) 或 openAsync() 方法 (適用於非同步執行模式) 進行連線。

如果您使用非同步 openAsync() 作業開啟資料庫,請註冊 SQLConnection 實體的 open 事件,才能知道 openAsync() 作業何時完成。註冊 SQLConnection 實體的 error 事件,以判斷作業是否失敗。

下列範例會示範如何以非同步執行開啟現有的資料庫檔案。資料庫檔案稱為「DBSample.db」,且位於使用者的應用程式儲存目錄。

import flash.data.SQLConnection; 
import flash.data.SQLMode; 
import flash.events.SQLErrorEvent; 
import flash.events.SQLEvent; 
import flash.filesystem.File; 
     
var conn:SQLConnection = new SQLConnection(); 
     
conn.addEventListener(SQLEvent.OPEN, openHandler); 
conn.addEventListener(SQLErrorEvent.ERROR, errorHandler); 
     
// The database file is in the application storage directory 
var folder:File = File.applicationStorageDirectory; 
var dbFile:File = folder.resolvePath("DBSample.db"); 
     
conn.openAsync(dbFile, SQLMode.UPDATE); 
     
function openHandler(event:SQLEvent):void 
{ 
    trace("the database opened successfully"); 
} 
     
function errorHandler(event:SQLErrorEvent):void 
{ 
    trace("Error message:", event.error.message); 
    trace("Details:", event.error.details); 
} 
<?xml version="1.0" encoding="utf-8"?> 
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="init()"> 
    <mx:Script> 
        <![CDATA[ 
            import flash.data.SQLConnection; 
            import flash.data.SQLMode; 
            import flash.events.SQLErrorEvent; 
            import flash.events.SQLEvent; 
            import flash.filesystem.File; 
             
            private function init():void 
            { 
                var conn:SQLConnection = new SQLConnection(); 
                 
                conn.addEventListener(SQLEvent.OPEN, openHandler); 
                conn.addEventListener(SQLErrorEvent.ERROR, errorHandler); 
                 
                // The database file is in the application storage directory 
                var folder:File = File.applicationStorageDirectory; 
                var dbFile:File = folder.resolvePath("DBSample.db"); 
                 
                conn.openAsync(dbFile, SQLMode.UPDATE); 
            } 
             
            private function openHandler(event:SQLEvent):void 
            { 
                trace("the database opened successfully"); 
            } 
             
            private function errorHandler(event:SQLErrorEvent):void 
            { 
                trace("Error message:", event.error.message); 
                trace("Details:", event.error.details); 
            } 
        ]]> 
    </mx:Script> 
</mx:WindowedApplication>

下列範例會示範如何以同步執行開啟現有的資料庫檔案。資料庫檔案稱為「DBSample.db」,且位於使用者的應用程式儲存目錄。

import flash.data.SQLConnection; 
import flash.data.SQLMode; 
import flash.errors.SQLError; 
import flash.filesystem.File; 
     
var conn:SQLConnection = new SQLConnection(); 
     
// The database file is in the application storage directory 
var folder:File = File.applicationStorageDirectory; 
var dbFile:File = folder.resolvePath("DBSample.db"); 
     
try 
{ 
    conn.open(dbFile, SQLMode.UPDATE); 
    trace("the database opened successfully"); 
} 
catch (error:SQLError) 
{ 
    trace("Error message:", error.message); 
    trace("Details:", error.details); 
} 
<?xml version="1.0" encoding="utf-8"?> 
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="init()"> 
    <mx:Script> 
        <![CDATA[ 
            import flash.data.SQLConnection; 
            import flash.data.SQLMode; 
            import flash.errors.SQLError; 
            import flash.filesystem.File; 
             
            private function init():void 
            { 
                var conn:SQLConnection = new SQLConnection(); 
                 
                // The database file is in the application storage directory 
                var folder:File = File.applicationStorageDirectory; 
                var dbFile:File = folder.resolvePath("DBSample.db"); 
                 
                try 
                { 
                    conn.open(dbFile, SQLMode.UPDATE); 
                    trace("the database opened successfully"); 
                } 
                catch (error:SQLError) 
                { 
                    trace("Error message:", error.message); 
                    trace("Details:", error.details); 
                } 
            } 
        ]]> 
    </mx:Script> 
</mx:WindowedApplication>

請注意,非同步範例的 openAsync() 方法呼叫中,以及非同步範例的 open() 方法中,第二個引數是常數 SQLMode.UPDATE。為第二個參數 (openMode) 指定 SQLMode.UPDATE 會在指定的檔案不存在時,導致執行階段傳送錯誤。如果您為 openMode 參數傳遞 SQLMode.CREATE (或如果您讓 openMode 參數保持為關閉),執行階段會在指定的檔案不存在時,嘗試建立資料庫檔案。不過,檔案如果存在就會開啟,就和使用 SQLMode.Update 的情形一樣。您也可以為 openMode 參數指定 SQLMode.READ,以唯讀模式開啟現有的資料庫。在此情況下,可以從資料庫中擷取資料,但是無法加入、刪除或變更資料。