データベースの作成と変更Adobe AIR 1.0 およびそれ以降 アプリケーションでデータの追加や取得ができるようになる前に、アプリケーションがアクセスできるデータベースにテーブルが定義されている必要があります。ここで説明するのは、データベース作成タスクと、データベース内にデータ構造を作成するタスクです。これらのタスクはデータの挿入や取得よりも使用回数は少ないですが、ほとんどのアプリケーションに必須のものです。 データベースの作成データベースファイルを作成するには、まず SQLConnection インスタンスを作成します。次に、SQLConnection インスタンスの open() メソッドを呼び出して接続を同期実行モードで開くか、openAsync() メソッドを呼び出して非同期実行モードで開きます。open() メソッドと openAsync() メソッドは、データベースへの接続を開くために使用されます。open() メソッドまたは openAsync() メソッドで、存在しないファイルの場所を参照する File インスタンスを reference パラメーター(最初のパラメーター)に渡すと、その場所にデータベースファイルが作成され、新たに作成されたデータベースへの接続が開かれます。 データベースを作成する際には、open() メソッドを呼び出すか openAsync() メソッドを呼び出すかに関係なく、任意のファイル名拡張子を持つ任意の有効なファイル名をデータベースファイル名として使用できます。reference パラメーターに null を渡して open() メソッドや openAsync() メソッドを呼び出すと、ディスク上のデータベースファイルではなく新しいインメモリデータベースが作成されます。 次のコードリストは、非同期実行モードを使用してデータベースファイル(新しいデータベース)を作成する手順を示しています。この例では、データベースファイルが「DBSample.db」というファイル名でアプリケーション記憶領域ディレクトリの参照に保存されます。 import flash.data.SQLConnection;
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);
function openHandler(event:SQLEvent):void
{
trace("the database was created 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.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);
}
private function openHandler(event:SQLEvent):void
{
trace("the database was created successfully");
}
private function errorHandler(event:SQLErrorEvent):void
{
trace("Error message:", event.error.message);
trace("Details:", event.error.details);
}
]]>
</mx:Script>
</mx:WindowedApplication>
注意: File クラスでは特定のネイティブファイルパスを参照できますが、その場合、アプリケーションが複数のプラットフォームにわたって機能しなくなる可能性があります。例えば、C:¥Documents and Settings¥joe¥test.db というパスは、Windows 上でのみ機能します。このような理由から、File.applicationStorageDirectory などの File クラスの静的プロパティおよび resolvePath() メソッド(前の例で示したように)を使用することをお勧めします。詳しくは、File オブジェクトのパスを参照してください。
操作を同期的に実行する場合は、SQLConnection インスタンスでデータベース接続を開くときに open() メソッドを呼び出します。次の例は、操作を同期的に実行する SQLConnection インスタンスを作成して開く方法を示しています。 import flash.data.SQLConnection;
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);
trace("the database was created 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.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);
trace("the database was created successfully");
}
catch (error:SQLError)
{
trace("Error message:", error.message);
trace("Details:", error.details);
}
}
]]>
</mx:Script>
</mx:WindowedApplication>
データベーステーブルの作成データベースのテーブルを作成する際には、SELECT や INSERT などの SQL ステートメントを実行するときと同じ手順を使用して、そのデータベースに対して SQL ステートメントを実行します。テーブルを作成するには、新しいテーブルの列と制約の定義を含む CREATE TABLE ステートメントを使用します。SQL ステートメントの実行について詳しくは、SQL ステートメントの操作を参照してください。 次の例では、非同期実行モードを使用して既存のデータベースファイルに「employees」という名前のテーブルを作成しています。このコードでは、conn という名前の SQLConnection インスタンスが既に作成されてデータベースに接続されていることを前提としています。 import flash.data.SQLConnection;
import flash.data.SQLStatement;
import flash.events.SQLErrorEvent;
import flash.events.SQLEvent;
// ... create and open the SQLConnection instance named conn ...
var createStmt:SQLStatement = new SQLStatement();
createStmt.sqlConnection = conn;
var sql:String =
"CREATE TABLE IF NOT EXISTS employees (" +
" 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();
function createResult(event:SQLEvent):void
{
trace("Table created");
}
function createError(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.SQLStatement;
import flash.events.SQLErrorEvent;
import flash.events.SQLEvent;
private function init():void
{
// ... create and open the SQLConnection instance named conn ...
var createStmt:SQLStatement = new SQLStatement();
createStmt.sqlConnection = conn;
var sql:String =
"CREATE TABLE IF NOT EXISTS employees (" +
" 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 createResult(event:SQLEvent):void
{
trace("Table created");
}
private function createError(event:SQLErrorEvent):void
{
trace("Error message:", event.error.message);
trace("Details:", event.error.details);
}
]]>
</mx:Script>
</mx:WindowedApplication>
次の例では、同期実行モードを使用して既存のデータベースファイルに「employees」という名前のテーブルを作成しています。このコードでは、conn という名前の SQLConnection インスタンスが既に作成されてデータベースに接続されていることを前提としています。 import flash.data.SQLConnection;
import flash.data.SQLStatement;
import flash.errors.SQLError;
// ... create and open the SQLConnection instance named conn ...
var createStmt:SQLStatement = new SQLStatement();
createStmt.sqlConnection = conn;
var sql:String =
"CREATE TABLE IF NOT EXISTS employees (" +
" empId INTEGER PRIMARY KEY AUTOINCREMENT, " +
" firstName TEXT, " +
" lastName TEXT, " +
" salary NUMERIC CHECK (salary > 0)" +
")";
createStmt.text = sql;
try
{
createStmt.execute();
trace("Table created");
}
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.SQLStatement;
import flash.errors.SQLError;
private function init():void
{
// ... create and open the SQLConnection instance named conn ...
var createStmt:SQLStatement = new SQLStatement();
createStmt.sqlConnection = conn;
var sql:String =
"CREATE TABLE IF NOT EXISTS employees (" +
" empId INTEGER PRIMARY KEY AUTOINCREMENT, " +
" firstName TEXT, " +
" lastName TEXT, " +
" salary NUMERIC CHECK (salary > 0)" +
")";
createStmt.text = sql;
try
{
createStmt.execute();
trace("Table created");
}
catch (error:SQLError)
{
trace("Error message:", error.message);
trace("Details:", error.details);
}
}
]]>
</mx:Script>
</mx:WindowedApplication>
|
|