我想讓我的頭瞭解如何使用Flex/Actionscript 3(使用Adobe Air 2)中的事務執行SQLite批量插入。這工作,但它沒有意義的循環重新創建一個新的SQLStatement:Actionscript SQLite在事務中插入語句
private function onAddBulkContacts():void {
_responder = new Responder(resultEventHandler, errorEventHandler);
contacts_db.connection.begin(null, _responder);
var statement:SQLStatement;
for (var i:uint=0; i<parseInt(bulkAdd.numberToAdd.text); i++) {
statement = new SQLStatement();
statement.sqlConnection = contacts_db.connection;
statement.text ="INSERT INTO contacts ('name', 'lastname') VALUES (@NAME, @LASTNAME)";
statement.addEventListener(SQLErrorEvent.ERROR, function(event:Event):void {
trace('statement error');});
statement.addEventListener(SQLEvent.RESULT, function(event:Event):void { trace('result'); });
statement.parameters['@NAME'] = "Name " + i.toString();
statement.parameters['@LASTNAME'] = "LastName " + i.toString();
statement.execute();
}
contacts_db.connection.commit();
}
我想要做的是創造的SQLStatement一次,讓它編譯,然後就傳遞中的新論點循環,最後提交它,例如
private function onAddBulkContacts():void {
_responder = new Responder(resultEventHandler, errorEventHandler);
contacts_db.connection.begin(null, _responder);
var statement:SQLStatement;
statement = new SQLStatement();
statement.sqlConnection = contacts_db.connection;
statement.text ="INSERT INTO contacts ('name', 'lastname') VALUES (@NAME, @LASTNAME)";
statement.addEventListener(SQLErrorEvent.ERROR, function(event:Event):void {
trace('statement error');});
statement.addEventListener(SQLEvent.RESULT, function(event:Event):void { trace('result'); });
for (var i:uint=0; i<parseInt(bulkAdd.numberToAdd.text); i++) {
statement.parameters['@NAME'] = "Name " + i.toString();
statement.parameters['@LASTNAME'] = "LastName " + i.toString();
statement.execute();
}
contacts_db.connection.commit();
}
但後者的代碼拋出一個錯誤說,它無法通過執行第二次,因爲語句本身仍在執行(我相信會在那個狀態,直到提交)。我想我可以理解語句被添加到執行隊列中,但是我不得不在循環中添加SQL文本,這正是我試圖避免的。我確信有更好的方法來做到這一點,但我花了太長時間的黑客攻擊和閱讀,試圖找出正確的順序。有任何想法嗎?
是否有一個原因,你不能有一個語句,但增量參數的所有插入?即。 「@NAME1」,「@ NAME2」等 –
SQLite不支持「INSERT到聯繫人(姓名,姓氏)VALUES('Frank','Furter'),('Jack','Horner'),('Bo' ,'Peep')「? –