Erstellen und Modifizieren von Datenbanken

Adobe AIR 1.0 und höher

Bevor Ihre Anwendung Daten hinzufügen oder abrufen kann, muss eine Datenbank mit definierten Tabellen vorhanden sein, auf die die Anwendung zugreifen kann. Nachstehend werden die Aufgaben für das Erstellen einer Datenbank und das Erstellen der Datenstruktur in einer Datenbank beschrieben. Auch wenn diese Aufgaben nicht so häufig wie das Einfügen und Abrufen von Daten verwendet werden, sind sie doch für die meisten Anwendungen erforderlich.

Erstellen von Datenbanken

Zur Erstellung einer Datenbankdatei erstellen Sie zunächst eine SQLConnection -Instanz. Sie rufen deren open() -Methode auf, um die Verbindung im synchronen Ausführungsmodus zu öffnen, oder die openAsync() der Instanz, um den asynchronen Ausführungsmodus zu verwenden. Mit den Methoden open() und openAsync() wird eine Verbindung zu einer Datenbank hergestellt. Wenn Sie eine File-Instanz übergeben, die für den reference -Parameter (dies ist der erste Parameter) auf einen nicht vorhandenen Speicherort verweist, erstellt die open() - oder openAsync() -Methode eine Datenbankdatei an diesem Speicherort und öffnet eine Verbindung zu der neu erstellten Datenbank.

Unabhängig davon, ob Sie die open() -Methode oder die openAsync() -Methode zum Erstellen einer Datenbank verwenden, kann der Name der Datenbankdatei ein beliebiger gültiger Dateiname mit einer beliebigen Dateierweiterung sein. Wenn Sie die open() - oder openAsync() -Methode mit null als reference -Parameter aufrufen, wird eine In-Memory-Datenbank erstellt statt einer Datenbankdatei auf der Festplatte.

Im nachstehend aufgeführten Code wird der Ablauf beim Erstellen einer Datenbankdatei (einer neuen Datenbank) im asynchronen Ausführungsmodus dargestellt. In diesem Fall wird die Datenbankdatei unter dem Namen „DBSample.db“ gespeichert, siehe Verweisen auf das Anwendungsspeicherverzeichnis :

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>
Hinweis: Mit der File-Klasse können Sie zwar auf einen spezifischen nativen Dateipfad zeigen, damit erhalten Sie möglicherweise jedoch Anwendungen, die nicht auf allen Plattformen funktionieren. Der Pfad C:\Dokumente und Einstellungen\joe\test.db funktioniert zum Beispiel nur unter Windows. Deshalb ist es besser, die statischen Eigenschaften der File-Klasse , wie File.applicationStorageDirectory , sowie die resolvePath() -Methode zu verwenden (wie im Beispiel weiter oben). Weitere Informationen finden Sie unter Pfade von File-Objekten .

Um Operationen synchron auszuführen, rufen Sie beim Öffnen einer Datenbankverbindung mit der SQLConnection-Instanz die open() -Methode auf. Im folgenden Beispiel wird eine SQLConnection-Instanz erstellt und geöffnet, die Operationen synchron ausführt.

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>

Erstellen von Datenbanktabellen

Zum Erstellen einer Tabelle in einer Datenbank gehört das Ausführen einer SQL-Anweisung für diese Datenbank. Dabei gehen Sie genauso vor wie beim Ausführen einer SQL-Anweisung wie SELECT , INSERT usw. Um eine Tabelle zu erstellen, verwenden Sie die CREATE TABLE -Anweisung, die Definitionen von Spalten und Beschränkungen für die neue Tabelle erhält. Weitere Informationen zum Ausführen von SQL-Anweisungen finden Sie unter Arbeiten mit SQL-Anweisungen .

Im folgenden Beispiel wird eine Tabelle mit dem Namen „employees“ in einer vorhandenen Datenbankdatei erstellt, wobei der asynchrone Ausführungsmodus verwendet wird. Beachten Sie, dass in diesem Beispiel davon ausgegangen wird, dass eine SQLConnection -Instanz namens conn bereits instanziiert wurde und eine Verbindung mit der Datenbank besteht.

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>

Im folgenden Beispiel wird eine Tabelle mit dem Namen „employees“ in einer vorhandenen Datenbankdatei erstellt, wobei der synchrone Ausführungsmodus verwendet wird. Beachten Sie, dass in diesem Beispiel davon ausgegangen wird, dass eine SQLConnection -Instanz namens conn bereits instanziiert wurde und eine Verbindung mit der Datenbank besteht.

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>