> -----Original Message-----
> From: [EMAIL PROTECTED] 
> [mailto:[EMAIL PROTECTED] On Behalf Of Kodok Márton
> Sent: Monday, August 11, 2008 2:21 PM
> To: General Discussion of SQLite Database
> Subject: [sqlite] multiple inserts
> 
> Hi,
> 
> Does SQLite accepts multiple insert?
> insert into table (col1,col2) values (val1,val2), 
> (val3,val4), (val5,val6)

No.

> If not, how can I speed up large inserts?
> eg: 1000 rows
> 


Here is a quick shot: Just use a transaction surrounding your INSERTs, and use 
prepared statements and parameter bindings to prevent multiple parsing.

---------------------

char* errmsg = NULL;
sqlite3* db = NULL;

db = open( ....)


// begin transaction
sqlite3_exec( db, "BEGIN TRANSACTION", NULL, NULL, &errmsg);

// prepare for multiple inserts
sqlite3_stmt* stmt = sqlite3_prepare_v2(  "INSERT INTO T1 (C1, C2, C3) VALUES 
(?, ?, ?)")

-for-each-row
// read doc for sqlite3_bind_* carefully!!
sqlite3_bind_int( stmt, 1,  someIntVariable);
sqlite3_bind_text( stmt, 2,  -1, "hello", SQLITE_STATIC);
sqlite3_bind_text( stmt, 3,  -1, pzSomeString, SQLITE_TRANSIENT);
sqlite3_step(stmt);   // executes the INSERT
sqlite3_reset(stmt);  // important! Clears the old values, makes the statement 
accept new parameters.
-end-for-each

sqlite3_finalize(stmt); // clean up prepared statement
 
// begin transaction
sqlite3_exec( db, "COMMIT", NULL, NULL, &errmsg);  // COMMIT all dirty pages at 
once
---------------------

Regards,
Stefan.
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to