Adobe Air (wiwobooks.com Release)
(WHERE-Klausel) auf mindestens einen Datensatz zutreffen. Das Ergebnis einer SELECT-Abfrage wird in der Eigenschaft data einer SQLResult -Instanz zurückgegeben. Trifft die Abfrage auf keinen Datensatz zu, enthält die Eigenschaft data ein leeres Array, wenn die Abfrage ansonsten syntaktisch korrekt ist.
Lösungsweg
1. Erstellen einer SQLStatement -Instanz
2. Zuweisen der offenen Datenbankverbindung zur Eigenschaft sqlConnection der SQLStatement -Instanz
3. Asynchroner Zugriff: Registrieren von Ereignis-Listenern für SQLEvent.RESULT und SQLErrorEvent.ERROR
4. Definition des SELECT-Statements als Text und dessen Zuweisung zur Eigenschaft text
5. Bei Verwendung von Parametern: Setzen der Parameter im (assoziativen) Array parameters
6. Aufruf der Methode execute() der SQLStatement -Instanz
7. Abruf des Ergebnisses als SQLResult -Instanz mithilfe der SQLStatement - Instanzmethode getResult() im Ereignis-Listener für SQLEvent.RESULT
8. Auswerten des Ergebnisses mithilfe der SQLResult -Eigenschaft data
So geht es
Der folgende Quelltextausschnitt greift mit einer SQLStatement -Instanz auf die Tabelle table_test zu und schickt ein SELECT-Statement an die Datenbank, das alle Einträge aus der Datenbank ausliest. Dieses Beispiel geht davon aus, dass sich bereits Daten in der Datenbank befinden:
import flash.data.SQLConnection;
import flash.data.SQLStatement;
import flash.data.SQLResult;
import flash.events.SQLEvent;
import flash.events.SQLErrorEvent;
var selectStmt:SQLStatement = new SQLStatement();
// myDBConn ist zu diesem Zeitpunkt bereits geöffnet
// (hier nicht gezeigt)
selectStmt.sqlConnection = myDBConn;
selectStmt.addEventListener(SQLErrorEvent.ERROR, handleStmtError); selectStmt.addEventListener(SQLEvent.RESULT, handleStmtResult); var sql:String = "SELECT id, name, zahl FROM main.test_table"; selectStmt.text = sql;
selectStmt.execute();
function handleStmtResult(e:SQLEvent):void {
var stmt:SQLStatement = SQLStatement(e.target); var result:SQLResult = stmt.getResult();
// kommt ein Ergebnis zurück?
if(result.data.length > 0) {
for(var i:uint = 0; i < result.data.length; i++) { trace("Element " + i.toString() + ":"); trace("id: " + result.data[i].id);
trace("name: " + result.data[i].name); trace("zahl: " + result.data[i].zahl);
}
}
}
trace("Fehler: " + e.text);
trace("Details: " + e.error.details);
function handleStmtError(e:SQLErrorEvent):void { trace("Hoppla, da ist bei einem SQL-Statement etwas schiefgelaufen.");
}
Listing 13.6 Beispiel: Abruf von Daten aus einer Datenbanktabelle
13.6.2 Daten schrittweise abrufen
Wenn Sie das Ergebnis einer SELECT-Datenbankabfrage nicht auf einmal abrufen wollen – etwa weil die Ergebnismenge zu groß ist –, können Sie es auch schrittweise abrufen.
Lösungsweg
1. Erstellen einer SQLStatement -Instanz
2. Formulieren der SELECT-Abfrage als Zeichenkette
3. Bei asynchronem Zugriff: Registrieren von Ereignis-Listenern für SQLEvent. RESULT , SQLErrorEvent.ERROR
4. Zuweisen des Abfragetexts zur SQLStatement -Instanzvariable text 5. Aufruf der SQLStatement -Instanzmethode execute() mit Ganzzahlparameter für die Anzahl der abzurufenden Zeichensätze
6. Auswerten der Ergebnismenge ( SQLResult -Instanz mit data -Eigenschaft) im Ereignis-Listener für SQLEvent.RESULT (bei asynchronem Zugriff) 7. Aufruf der SQLStatement -Instanzmethode next() zum Abruf der nächsten Datensätze, Ganzzahlparameter für die Anzahl der Datensätze 8. Auswerten des Ergebnisses und Abruf weiterer Datensätze (vorherige zwei Schritte), bis das Ergebnis komplett abgerufen wurde.
sqlStatementInstanz.complete == false
Abruf noch nicht abgeschlossen, Statement wird noch ausgeführt. sqlStatementInstanz.complete == true
Abruf abgeschlossen, Statement-Ausführung ist beendet.
So geht es
Zum teilweisen Abruf des Ergebnisses einer SELECT-Abfrage versehen Sie die SQLStatement -Instanzmethode execute() mit einem Ganzzahlparameter für die Anzahl der abzurufenden Datensätze:
selectStmt.execute(25); // die ersten 25 Datensätze abrufen
Das Ergebnis wird auf die gleiche Art und Weise ausgewertet wie beim Abruf des gesamten Ergebnisses im vorherigen Abschnitt. Sobald Sie die Daten mithilfe der data -Eigenschaft der SQLResult -Instanz ausgewertet haben, können Sie die nächsten Ergebnisdatensätze mit der Methode next() abrufen (genau genommen können Sie das auch tun, ohne die Daten auszuwerten), wobei Sie dieser als Parameter die Zahl der abzurufenden Datensätze mitgeben:
selectStmt.next(25);
Weitere Kostenlose Bücher