建立及修改資料庫Adobe AIR 1.0 以及更新的版本 在您的應用程式能夠新增或擷取資料以前,必須在應用程式中定義您應用程式能夠存取的資料庫。本節描述建立資料庫及在資料庫中建立資料結構的工作。雖然這些工作的使用程度不如資料偵聽和擷取那麼頻繁,但是大部分應用程式都需要執行這些工作。 建立資料庫若要建立資料庫檔案,首先要建立 SQLConnection 實體。然後呼叫其 open() 方法,在同步執行模式中開啟,或呼叫其 openAsync() 方法在非同步執行模式中開啟。open() 和 openAsync() 方法都可用來開啟資料庫的連線。如果您傳遞 File 實體來參考沒有 reference 參數 (第一個參數) 的檔案位置,open() 或 openAsync() 方法在會該檔案位置建立資料庫檔案,然後開啟新建立資料庫的連線。 不管是呼叫 open() 方法或 openAsync() 方法來呼叫資料庫,資料庫檔案的名稱都可以是任何有效的檔案名稱加上任何副檔名。如果您呼叫 open() 或 openAsync() 方法,而 reference 參數為 null,就會建立新的記憶體內資料庫,而不是在硬碟上建立資料庫檔案。 下面列出的程式碼會示範使用非同步執行模式來建立資料庫檔案 (新資料庫) 的程序。在此情況下,資料庫檔案會儲存於指向應用程式儲存目錄中,檔案名稱是「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 類別的靜態屬性,如 File.applicationStorageDirectory,和 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>
建立資料庫資料表在資料庫中建立資料表包含在該資料庫上執行 SQL 陳述式、使用與用來執行 SELECT、INSERT 之類 SQL 陳述式相同的處理等等。若要建立資料表,請使用 CREATE TABLE 陳述式,該陳述式包含了欄的定義和新資料表的限制。如需有關執行 SQL 陳述式的詳細資訊,請參閱使用 SQL 陳述式。 下列範例會示範如何使用非同步執行模式,在現有資料庫檔案中建立名為「employees」的資料表。請注意,此程式碼會假設已有一個實體化且連線至資料庫的 SQLConnection 實體 conn。 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」的資料表。請注意,此程式碼會假設已有一個實體化且連線至資料庫的 SQLConnection 實體 conn。 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>
|
|