Infoga dataAdobe AIR 1.0 och senare När du hämtar data till en databas kör du en INSERT-sats (SQL). När satskörningen har slutförts kan du få åtkomst till primärnyckeln för den nyligen infogade raden om nyckeln genererades av databasen. Köra en INSERT-satsOm du vill lägga till data i en tabell i en databas skapar och kör du en SQLStatement-instans vars text är en INSERT-sats (SQL). I följande exempel används en SQLStatement-instans för att lägga till en datarad i den befintliga tabellen ”employees”. I det här exemplet visas hur du infogar data i asynkront körningsläge. Observera att koden i det här exemplet innehåller en SQLConnection-instans med namnet conn som redan har initierats och är ansluten till en databas. I exemplet antas också att tabellen ”employees” redan har skapats. 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>
I följande exempel läggs en datarad till i den befintliga tabellen ”employees” i synkront körningsläge. Observera att koden i det här exemplet innehåller en SQLConnection-instans med namnet conn som redan har initierats och är ansluten till en databas. I exemplet antas också att tabellen ”employees” redan har skapats. 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>
Hämta en databasgenererad primärnyckel för en infogad radNär du har infogat en datarad i en tabell måste koden ofta innehålla en databasgenererad primärnyckel eller ett radidentifierarvärde för den nyligen infogade raden. När du till exempel har infogat en rad i en tabell kanske du vill lägga till rader i en relaterad tabell. I så fall måste du infoga primärnyckelvärdet som en främmande nyckel i den relaterade tabellen. Primärnyckeln för en nyligen infogad rad kan hämtas med hjälp av det SQLResult-objekt som är associerat med satskörningen. Det här är samma objekt som används för att få åtkomst till resultatdata efter att en SELECT-sats har körts. Liksom med SQL-satser skapas en SQLResult-instans när körningen av en INSERT-sats har slutförts. Du får åtkomst till SQLResult-instansen genom att anropa SQLStatement-objektetsgetResult()-metod om du använder en händelselyssnare eller använder synkront körningsläge. Alternativt kan du använda asynkront körningsläge och skicka en Responder-instans till execute()-anropet, så att SQLResult-instansen skickas som ett argument till resultathanterarfunktionen. Oavsett vilket alternativ du väljer har SQLResult-instansen egenskapen lastInsertRowID, som innehåller radidentifieraren för den senast infogade raden, om SQL-satsen som kördes är en INSERT-sats. I följande exempel visas hur du får åtkomst till primärnyckeln för en infogad rad i asynkront körningsläge: 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
}
I följande exempel visas hur du får åtkomst till primärnyckeln för en infogad rad i synkront körningsläge: 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
}
Observera att radidentifieraren kan vara (eller inte vara) värdet för kolumnen som har angetts som primärnyckelkolumn i tabelldefinitionen enligt följande regler:
Om du som en konsekvens av de här reglerna vill ha en explicit definierad primärnyckelkolumn vars värde är tillgängligt efter ett INSERT-kommando via egenskapen SQLResult.lastInsertRowID, måste kolumnen definieras som en INTEGER PRIMARY KEY-kolumn. Men även om tabellen inte innehåller någon explicit INTEGER PRIMARY KEY-kolumn går det lika bra att använda den databasgenererade radidentifieraren som primärnyckel för tabellen när du definierar relationer med relaterade tabeller. Värdet för radidentifierarkolumnen är tillgängligt i alla SQL-satser när du använder något av kolumnnamnen ROWID, _ROWID_ eller OID. Du kan skapa en kolumn för främmande nyckel i en relaterad tabell och använda radidentifierarvärdet som kolumnvärde för främmande nyckel på samma sätt som du skulle ha gjort med en explicit deklarerad INTEGER PRIMARY KEY-kolumn. Om du använder en godtycklig primärnyckel i stället för en naturlig nyckel, och så länge du inte har något emot att primärnyckelvärdet genereras åt dig i körningen, blir det inte så stor skillnad om du använder en INTEGER PRIMARY KEY-kolumn eller den systemgenererade radidentifieraren som tabellens primärnyckel när du definierar en relation för främmande nyckel mellan två tabeller. Mer information om primärnycklar och genererade radidentifierare finns i SQL-stöd i lokala databaser. |
|