Inserción de datosAdobe AIR 1.0 y posterior La adición de datos a una base de datos implica ejecutar una declaración SQL INSERT. Una vez que se termina de ejecutar la declaración, puede acceder a la clave principal para la fila recientemente insertada si la base de datos generó la clave. Ejecución de una declaración INSERTPara añadir datos a una tabla en una base de datos, se crea y ejecuta una instancia de SQLStatement cuyo texto es una declaración SQL INSERT. En el siguiente ejemplo se utiliza una instancia SQLStatement para añadir una fila de datos a la tabla de empelados ya existente. En este ejemplo se demuestra la inserción de datos usando el modo de ejecución asíncrono. Observe que en este código se supone que existe una instancia de SQLConnection denominada conn que ya ha sido creada y está conectada a la base de datos. Asimismo supone que la tabla “employees” ya ha sido creada. 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>
En el siguiente ejemplo se añade una fila de datos a la tabla de empelados existente, usando el modo de ejecución sincrónico. http://help.adobe.com/es_ES/Flash/CS5/AS3LR/flash/data/SQLConnection.htmlObserve que este código supone que existe una instancia SQLConnection denominada conn que ya se ha creado y está conectada a una base de datos. Asimismo supone que la tabla “employees” ya ha sido creada. 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>
Recuperación de la clave principal generada por la base de datos de una fila insertadaA menudo, después de insertar una fila de datos en una tabla, el código necesita conocer una clave principal generada por la base de datos o un valor del identificador de fila para la fila recientemente insertada. Por ejemplo, una vez que inserta una fila en una tabla, puede añadir filas en una tabla relacionada. En ese caso querrá insertar el valor de la clave principal como una clave externa en la tabla relacionada. La clave principal de la fila recientemente insertada se puede recuperar usando el objeto SQLResult asociado a la ejecución de la declaración. Este es el mismo objeto que se utiliza para acceder a los datos del resultado después de ejecutar una declaración SELECT. Como con cualquier declaración SQL, cuando se completa la ejecución de una declaración INSERT el motor de ejecución crea una instancia SQLResult. Se accede a la instancia de SQLResult llamando al método getResult() del objeto SQLStatement si se usa un detector de evento o si usa el modo de ejecución sincrónico. Como alternativa, si usa el modo de ejecución asíncrono y pasa una instancia de Responder a la llamada execute(), la instancia SQLResult se pasa como un argumento a la función de control de resultados. En cualquier caso, la instancia SQLResult tiene una a propiedad, lastInsertRowID, que contiene el identificador de fila de la fila más recientemente insertada si la declaración SQL ejecutada es una declaración INSERT. En el siguiente ejemplo se demuestra el acceso a la clave principal de una fila insertada en el modo de ejecución asíncrono: 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
}
En el siguiente ejemplo se demuestra el acceso a la clave principal de una fila insertada en el modo de ejecución sincrónico: 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
}
Observe que el identificador de fila puede o no ser el valor de la columna que está designada como la columna de la clave principal en la definición de la tabla, según las siguientes reglas:
Como consecuencia, si desea tener una columna de clave principal explícitamente definida cuya variable está disponible después de un comando INSERT a través de la propiedad SQLResult.lastInsertRowID, la columna debe estar definida como una columna INTEGER PRIMARY KEY. Aunque la tabla no incluye una columna explícita INTEGER PRIMARY KEY, resulta igualmente aceptable utilizar el identificador de fila generado por la base de datos como una clave principal para la tabla en el sentido de definir relaciones con tablas relacionadas. El valor de la columna del identificador de fila está disponible en cualquier declaración SQL utilizando uno de los nombres especiales de columna ROWID, _ROWID_ o OID. Puede crear una columna de clave externa en una tabla relacionada y usar el valor del identificador de fila como el valor de la columna de la clave externa como lo haría con una columna INTEGER PRIMARY KEY explícitamente declarada. En ese sentido, si está usando una clave principal arbitraria en lugar de una clave natural y siempre y cuando no le importe que el motor de ejecución genere el valor de la clave principal, no hay diferencia si utiliza una columna INTEGER PRIMARY KEY o el identificador de fila generado por el sistema como la clave principal de la tabla para definir una relación de clave externa entre dos tablas. Para obtener más información sobre las claves principales y los identificadores de fila generados, consulte Compatibilidad de SQL en bases de datos locales. |
|