Einfügen von DatenAdobe AIR 1.0 und höher Zum Hinzufügen von Daten zu einer Datenbank muss eine SQL-Anweisung des Typs INSERT ausgeführt werden. Wenn die Ausführung der Anweisung abgeschlossen ist, können Sie auf den Primärschlüssel für die neu eingefügte Zeile zugreifen, falls der Schlüssel von der Datenbank generiert wurde. Ausführen einer INSERT-AnweisungUm einer Tabelle in einer Datenbank Daten hinzuzufügen, müssen Sie eine SQLStatement-Instanz erstellen und ausführen, deren Text eine SQL-Anweisung des Typs INSERT ist. Im folgenden Beispiel wird eine SQLStatement-Instanz verwendet, um der bereits vorhandenen Tabelle „employees“ eine Datenzeile hinzuzufügen. Dieses Beispiel veranschaulicht das Hinzufügen von Daten im asynchronen Ausführungsmodus. 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. Außerdem wird vorausgesetzt, dass die Tabelle „employees“ bereits erstellt wurde. import flash.data.SQLConnection;
import flash.data.SQLResult;
import flash.data.SQLStatement;
import flash.events.SQLErrorEvent;
import flash.events.SQLEvent;
// ... create and open the SQLConnection instance named conn ...
// create the SQL statement
var insertStmt:SQLStatement = new SQLStatement();
insertStmt.sqlConnection = conn;
// define the SQL text
var sql:String =
"INSERT INTO employees (firstName, lastName, salary) " +
"VALUES ('Bob', 'Smith', 8000)";
insertStmt.text = sql;
// register listeners for the result and failure (status) events
insertStmt.addEventListener(SQLEvent.RESULT, insertResult);
insertStmt.addEventListener(SQLErrorEvent.ERROR, insertError);
// execute the statement
insertStmt.execute();
function insertResult(event:SQLEvent):void
{
trace("INSERT statement succeeded");
}
function insertError(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.SQLResult;
import flash.data.SQLStatement;
import flash.events.SQLErrorEvent;
import flash.events.SQLEvent;
private function init():void
{
// ... create and open the SQLConnection instance named conn ...
// create the SQL statement
var insertStmt:SQLStatement = new SQLStatement();
insertStmt.sqlConnection = conn;
// define the SQL text
var sql:String =
"INSERT INTO employees (firstName, lastName, salary) " +
"VALUES ('Bob', 'Smith', 8000)";
insertStmt.text = sql;
// register listeners for the result and failure (status) events
insertStmt.addEventListener(SQLEvent.RESULT, insertResult);
insertStmt.addEventListener(SQLErrorEvent.ERROR, insertError);
// execute the statement
insertStmt.execute();
}
private function insertResult(event:SQLEvent):void
{
trace("INSERT statement succeeded");
}
private function insertError(event:SQLErrorEvent):void
{
trace("Error message:", event.error.message);
trace("Details:", event.error.details);
}
]]>
</mx:Script>
</mx:WindowedApplication>
Im folgenden Beispiel wird der bereits vorhandenen Tabelle „employees“ im synchronen Ausführungsmodus eine Datenzeile hinzugefügt. 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. Außerdem wird vorausgesetzt, dass die Tabelle „employees“ bereits erstellt wurde. import flash.data.SQLConnection;
import flash.data.SQLResult;
import flash.data.SQLStatement;
import flash.errors.SQLError;
// ... create and open the SQLConnection instance named conn ...
// create the SQL statement
var insertStmt:SQLStatement = new SQLStatement();
insertStmt.sqlConnection = conn;
// define the SQL text
var sql:String =
"INSERT INTO employees (firstName, lastName, salary) " +
"VALUES ('Bob', 'Smith', 8000)";
insertStmt.text = sql;
try
{
// execute the statement
insertStmt.execute();
trace("INSERT statement succeeded");
}
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.SQLResult;
import flash.data.SQLStatement;
import flash.errors.SQLError;
private function init():void
{
// ... create and open the SQLConnection instance named conn ...
// create the SQL statement
var insertStmt:SQLStatement = new SQLStatement();
insertStmt.sqlConnection = conn;
// define the SQL text
var sql:String =
"INSERT INTO employees (firstName, lastName, salary) " +
"VALUES ('Bob', 'Smith', 8000)";
insertStmt.text = sql;
try
{
// execute the statement
insertStmt.execute();
trace("INSERT statement succeeded");
}
catch (error:SQLError)
{
trace("Error message:", error.message);
trace("Details:", error.details);
}
}
]]>
</mx:Script>
</mx:WindowedApplication>
Abrufen eines von der Datenbank generierten Primärschlüssels einer eingefügten ZeileHäufig benötigt der Code nach dem Einfügen einer Datenzeile in eine Tabelle einen von der Datenbank generierten Primärschlüssel oder Zeilenbezeichnerwert für die neu eingefügte Zeile. Nachdem Sie eine Zeile in eine Tabelle eingefügt haben, könnten Sie zum Beispiel Zeilen in eine verwandte Tabelle einfügen. In diesem Fall würden Sie den Primärschlüssel als Fremdschlüssel in die verwandte Tabelle einfügen. Der Primärschlüssel einer neu eingefügten Zeile kann mithilfe des SQLResult-Objekts abgerufen werden, das mit der Anweisungsausführung assoziiert ist. Dies ist dasselbe Objekt, mit dem auf Ergebnisdaten zugegriffen wird, nachdem eine SELECT-Anweisung ausgeführt wurde. Wie bei jeder SQL-Anweisung erstellt die Laufzeitumgebung eine SQLResult-Instanz, wenn die Ausführung einer INSERT-Anweisung abgeschlossen ist. Sie können auf die SQLResult-Instanz zugreifen, indem Sie für das SQLStatement-Objekt die getResult()-Methode aufrufen, wenn Sie einen Ereignis-Listener verwenden oder im synchronen Ausführungsmodus arbeiten. Wenn Sie im asynchronen Ausführungsmodus arbeiten und eine Responder-Instanz an den execute()-Aufruf übergeben, wird alternativ dazu die SQLResult-Instanz als Argument an die Ergebnisprozedurfunktion übergeben. In jedem Fall verfügt die SQLResult-Instanz über eine Eigenschaft, lastInsertRowID, die den Zeilenbezeichner der zuletzt eingefügten Zeile enthält, wenn die ausgeführte SQL-Anweisung eine INSERT-Anweisung ist. Im folgenden Beispiel wird der Zugriff auf den Primärschlüssel einer eingefügten Zeile im asynchronen Ausführungsmodus veranschaulicht: insertStmt.text = "INSERT INTO ...";
insertStmt.addEventListener(SQLEvent.RESULT, resultHandler);
insertStmt.execute();
function resultHandler(event:SQLEvent):void
{
// get the primary key
var result:SQLResult = insertStmt.getResult();
var primaryKey:Number = result.lastInsertRowID;
// do something with the primary key
}
Im folgenden Beispiel wird der Zugriff auf den Primärschlüssel einer eingefügten Zeile im synchronen Ausführungsmodus veranschaulicht: insertStmt.text = "INSERT INTO ...";
try
{
insertStmt.execute();
// get the primary key
var result:SQLResult = insertStmt.getResult();
var primaryKey:Number = result.lastInsertRowID;
// do something with the primary key
}
catch (error:SQLError)
{
// respond to the error
}
Beachten Sie, dass der Zeilenbezeichner der Wert der Spalte sein kann, die als Primärschlüsselspalte in der Tabellendefinition bestimmt wurde; dies muss aber nicht unbedingt der Fall sein. Es gelten die folgenden Regeln:
Wenn Sie eine explizit definierte Primärschlüsselspalte haben möchten, deren Wert nach einem INSERT-Befehl über die SQLResult.lastInsertRowID-Eigenschaft verfügbar ist, müssen Sie die Spalte deshalb als INTEGER PRIMARY KEY-Spalte definieren. Selbst wenn Ihre Tabelle keine explizite INTEGER PRIMARY KEY-Spalte enthält, ist es dennoch möglich, den von der Datenbank generierten Zeilenbezeichner als Primärschlüssel für die Tabelle zu verwenden, wenn Sie Beziehungen zu verwandten Tabellen definieren. Der Spaltenwert des Zeilenbezeichners ist in jeder SQL-Anweisung verfügbar, indem einer der Sonderspaltennamen ROWID, _ROWID_ oder OID verwendet wird. Sie können in einer verwandten Tabelle eine Fremdschlüsselspalte erstellen und den Zeilenbezeichnerwert als Fremdschlüsselspaltenwert verwenden, wie Sie auch mit einer explizit deklarierten INTEGER PRIMARY KEY-Spalte vorgehen würden. Wenn Sie einen beliebigen Primärschlüssel anstelle eines natürlichen Schlüssels verwenden und wenn es Sie nicht stört, dass die Laufzeitumgebung den Primärschlüsselwert für Sie generiert, macht es wenig Unterschied, ob Sie eine INTEGER PRIMARY KEY-Spalte oder den vom System generierten Zeilenbezeichner als Primärschlüssel einer Tabelle verwenden, um eine Fremdschlüsselbeziehung zwischen zwei Tabellen zu definieren. Weitere Informationen über Primärschlüssel und generierte Zeilenbezeichner finden Sie unter SQL-Unterstützung in lokalen Datenbanken. |
|