データベースへの接続

Adobe AIR 1.0 およびそれ以降

データベース操作を実行するには、まずデータベースファイルへの接続を開く必要があります。SQLConnection インスタンスは 1 つ以上のデータベースへの接続を表すために使用されます。SQLConnection インスタンスを使用して接続した最初のデータベースを「メイン」データベースと呼びます。このデータベースには、open() メソッド(同期実行モードの場合)または openAsync() メソッド(非同期実行モードの場合)を使用して接続します。

非同期 openAsync() 操作を使用してデータベースを開く場合は、openAsync() 操作が完了したら通知されるように、SQLConnection インスタンスの open イベントに登録します。また、操作が失敗したかどうかを確認できるように、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() メソッドの呼び出しで、2 番目の引数が定数 SQLMode.UPDATE になっていることに注意してください。2 番目のパラメーター(openMode)に SQLMode.UPDATE を指定すると、指定したファイルが存在しない場合にエラーが送出されます。openMode パラメーターに SQLMode.CREATE を渡すと(または openMode パラメーターをオフのままにすると)、指定したファイルが存在しない場合にデータベースファイルが作成されます。ただし、ファイルが存在する場合は、ファイルが開かれます。この動作は、SQLMode.Update を使用した場合と同じです。そのほか、openMode パラメーターに SQLMode.READ を指定して既存のデータベースを読み取り専用モードで開くこともできます。その場合は、データベースからデータを取得することはできますが、データを追加したり、削除したり、変更したりすることはできません。