Tworzenie i modyfikowanie bazy danychAdobe AIR 1.0 i wersje późniejsze Zanim aplikacja będzie mogła dodać lub pobrać dane, konieczne jest utworzenie bazy danych zawierającej tabele, do których aplikacja będzie miała dostęp. W niniejszej sekcji opisano zadania tworzenia bazy danych, a także tworzenia struktury danych w bazie danych. Te zadania używane są rzadziej niż operacje wstawiania i pobierania danych, ale są konieczne dla większości aplikacji. Tworzenie bazy danychW celu utworzenia pliku bazy danych należy najpierw utworzyć instancję klasy SQLConnection. Następnie należy wywołać jej metodę open(), aby otworzyć w trybie wykonywania asynchronicznego, lub metodę openAsync() w celu otwarcia w trybie wykonywania synchronicznego. Metody open() i openAsync() są używane do otwarcia połączenia z bazą danych. W przypadku wprowadzenia instancji File, która odwołuje się do nieistniejącej lokalizacji pliku dla parametru reference (parametr pierwszy), metoda open() lub openAsync() tworzy plik bazy danych w tej lokalizacji pliku, a następnie otwiera połączenie z nowo utworzoną bazą danych. Bez względu na to, czy w celu utworzenia bazy danych została wywołana metoda open(), czy metoda openAsync(), nazwa pliku bazy danych może być dowolną poprawną nazwą z dowolnym rozszerzeniem nazwy pliku. Jeśli metoda open() lub openAsync() zostanie wywołana z wartością null dla parametru reference, zostanie utworzona nowa baza danych (w pamięci), a nie plik bazy danych na dysku. Poniższy fragment kodu przedstawia sposób tworzenia pliku bazy danych (nowej bazy danych) w trybie wykonywania asynchronicznego. W tym przypadku plik bazy danych jest zapisany w Wskazywanie na katalog zapisu aplikacji pod nazwą „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>
Uwaga: Mimo że klasa File umożliwia wskazanie pliku w konkretnej alternatywnej ścieżce, postępowanie takie może doprowadzić do nieprawidłowego działania aplikacji na różnych platformach. Na przykład ścieżka C:\Documents and Settings\janek\test.db jest prawidłowa tylko w systemie Windows. Dlatego najlepszym rozwiązaniem jest użycie procedur statycznych klasy File, takich jak File.applicationStorageDirectory, oraz metody resolvePath() (co ilustruje poprzedni przykład). Więcej informacji zawiera sekcja Ścieżki obiektów File.
W celu synchronicznego wykonywania operacji po otwarciu połączenia bazy danych za pomocą instancji SQLConnection należy wywołać metodę open(). Poniższy przykład przedstawia sposób tworzenia otwierania instancji SQLConnection, która wykonuje jej operacje synchronicznie: 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>
Tworzenie tabel bazy danychUtworzenie tabeli w bazie danych obejmuje wykonanie instrukcji SQL w tej bazie danych, z wykorzystaniem tego samego procesu, którego używa się w celu wykonania instrukcji SQL, takiej jak SELECT, INSERT, itp. W celu utworzenia tabeli należy zastosować instrukcję CREATE TABLE, która zawiera definicje kolumn i ograniczeń dla nowej tabeli. Więcej informacji na temat wykonywania instrukcji SQL zawiera sekcja Praca z instrukcjami SQL. Poniższy przykład demonstruje utworzenie tabeli o nazwie „employees” w istniejącym pliku bazy danych, przy wykorzystaniu trybu wykonywania asynchronicznego. W tym przykładzie przyjęto, że istnieje instancja klasy SQLConnection o nazwie conn, która jest już połączona z bazą danych. 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>
Poniższy przykład demonstruje sposób utworzenia tabeli o nazwie „employees” w istniejącym pliku bazy danych przy użyciu trybu wykonywania synchronicznego. W tym przykładzie przyjęto, że istnieje instancja klasy SQLConnection o nazwie conn, która jest już połączona z bazą danych. 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>
|
|