how much data are you dealing with. make your inserts synchronous perhaps
On Tue, Aug 16, 2011 at 1:24 PM, Tac Tacelosky <[email protected]> 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