how much data are you dealing with. make your inserts synchronous perhaps On Tue, Aug 16, 2011 at 1:24 PM, Tac Tacelosky <tac...@gmail.com> wrote:
> ** > > > I'm trying to get my head around how to do a SQLite bulk insert using > transactions. This works, but it doesn't make sense to re-create a new > SQLStatement in the loop: > > 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(); > } > > What I want to do is create the SQLStatement once, let it compile, then > just pass in new arguments within the loop, the commit it at the end, e.g. > > 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(); > } > > But the latter code throw an error saying that it can't execute the second > time through, since the statement itself is still executing (and I believe > will be in that state until the commit). I guess I can understand that the > statements get added to the execution queue, but it doesn't make sense that > I have to add the SQL text within the loop, exactly the thing I'm trying to > avoid. I'm sure there's a better way to do this, but I've spent way too > long hacking and reading trying to figure out what the proper sequence is. > Any ideas? > > Thanks, > > Tac > > -- j:pn \\no comment