Inserimento dei datiAdobe AIR 1.0 e versioni successive L'aggiunta di dati in un database implica l'esecuzione dell'istruzione SQL INSERT. Una volta che l'istruzione ha finito di essere eseguita si può accedere alla chiave primaria della riga appena inserita, se la chiave è stata generata dal database. Esecuzione dell'istruzione INSERTPer aggiungere dati a una tabella in un database, create ed eseguite un'istanza SQLStatement il cui testo è l'istruzione SQL INSERT. L'esempio seguente utilizza un'istanza SQLStatement per aggiungere una riga di dati alla tabella “employees” già esistente. Questo esempio illustra l'inserimento dei dati nella modalità di esecuzione asincrona. Tenete presente che questo elenco presuppone che esista un'istanza SQLConnection denominata conn già attivata e connessa al database. Presuppone inoltre che la tabella “employees” sia già stata creata. 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>
L'esempio seguente aggiunge una riga di dati alla tabella “employees” già esistente utilizzando la modalità di esecuzione sincrona. Tenete presente che questo elenco presuppone che esista un'istanza SQLConnection denominata conn già attivata e connessa al database. Presuppone inoltre che la tabella “employees” sia già stata creata. 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>
Recupero della chiave primaria generata dal database di una riga inseritaSpesso, dopo che si è inserita una riga di dati in una tabella, il codice richiede l'aggiunta di una chiave primaria generata dal database, o valore identificatore della riga, relativa alla riga appena inserita. Ad esempio, una volta che si sia inserita una riga in una tabella, si potrebbe voler aggiungere righe in una tabella correlata. In tal caso si dovrebbe inserire nella tabella correlata il valore della chiave primaria come chiave esterna. È possibile recuperare la chiave primaria di una riga appena inserita facendo uso dell'oggetto SQLResult generato dall'esecuzione dell'istruzione. Si tratta dello stesso oggetto utilizzato per accedere ai dati dei risultati dopo l'esecuzione dell'istruzione SELECT. Come per tutte le istruzioni SQL, quando l'esecuzione di INSERT viene completata il runtime crea un'istanza SQLResult. Potete accedere all'istanza SQLResult chiamando il metodo getResult() dell'oggetto SQLStatement, se state utilizzando un listener degli eventi o la modalità di esecuzione sincrona. In alternativa, se state utilizzando la modalità di esecuzione asincrona e passate un'istanza Responder alla chiamata execute(), l'istanza SQLResult viene passata alla funzione gestore evento risultato come argomento. In ogni caso, l'istanza SQLResult ha una proprietà, lastInsertRowID, che contiene l'identificatore della riga inserita più di recente se l'istruzione SQL eseguita è INSERT. L'esempio seguente illustra l'accesso alla chiave primaria di una riga inserita nella modalità di esecuzione asincrona. 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
}
L'esempio seguente illustra l'accesso alla chiave primaria di una riga inserita nella modalità di esecuzione sincrona. 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
}
Tenete presente che l'identificatore della riga può anche non essere il valore della colonna designata come colonna della chiave primaria nella definizione della tabella, secondo le regole seguenti.
Come conseguenza di queste regole, se desiderate avere una colonna della chiave primaria definita in modo esplicito il cui valore sia disponibile dopo il comando INSERT tramite la proprietà SQLResult.lastInsertRowID, tale colonna deve essere definita come colonna INTEGER PRIMARY KEY. Anche se la tabella non include una colonna INTEGER PRIMARY KEY esplicita, è ugualmente accettabile utilizzare l'identificatore della riga generato dal database come chiave primaria per la tabella, allo scopo di definire le relazioni con le tabelle correlate. Il valore della colonna dell'identificatore della riga è disponibile in tutte le istruzioni SQL se si usa uno dei nomi speciali delle colonne ROWID, _ROWID_ oppure OID. È possibile creare una colonna della chiave esterna in una tabella correlata ed utilizzare il valore identificatore della riga come valore della colonna della chiave esterna, esattamente come si fa nei casi in cui è presente una colonna INTEGER PRIMARY KEY dichiarata esplicitamente. Da questo punto di vista, se si sta usando un chiave primaria arbitraria invece che una chiave naturale, e se non si obietta al fatto che il runtime genera il valore della chiave primaria per conto dell'utente, non fa molta differenza che si utilizzi come chiave primaria di una tabella la colonna INTEGER PRIMARY KEY oppure l'identificatore della riga generato dal sistema, allo scopo di definire una relazione con chiave esterna fra due tabelle. Per ulteriori informazioni sulle chiavi principali e gli identificatori di riga generati, vedete Supporto di SQL nei database locali. |
|