On 7/21/06, Daniel van Ham Colchete <[EMAIL PROTECTED]> wrote:
I'm having problems understanding the SQLite docs. At the 'C/C++ Interface for SQLite Version 3' it says that sqlite3_exec is a wrapper to 'prepare, finalize, reset' without a step. But a little bit down the document it says you should use and step. But again, what if I don't want to wait the busy state anymore? Should I use finalize or interrupt and then finalize?
Here's some example code: sqlite3* db; // connect to database if ( sqlite3_open( "test.db", &db ) ) throw "Can't open database"; char* sql; // two forms of the same sql sql = "SELECT one.test1, two.test2" " FROM one" " INNER JOIN two ON one.id = two.id" ; sqlite3_stmt* pStmt; if ( sqlite3_prepare( db, sql, strlen(sql), &pStmt, NULL ) != SQLITE_OK ) { string str = "Cannot prepare sql: "; str += sql[t]; str += ", Error: "; str += sqlite3_errmsg(db); throw str.c_str(); } bool Loop = true; while ( Loop ) switch ( sqlite3_step( pStmt ) ) { case SQLITE_ROW: // retrieve the results char* p = (char *) sqlite3_column_text( pStmt, 0 ); string test1 = string( p ? p : "" ); p = (char *) sqlite3_column_text( pStmt, 1 ); string test2 = string( p ? p : "" ); break; case SQLITE_DONE: Loop = false; break; case SQLITE_BUSY: case SQLITE_LOCKED: default: string str = "Cannot execute sql: "; str += sql[t]; str += ", Error: "; str += sqlite3_errmsg(db); throw str.c_str(); break; } // clean up when finished sqlite3_finalize( pStmt ); sqlite3_close( db ); -- SqliteImporter and SqliteReplicator: Command line utilities for Sqlite http://www.reddawn.net/~jsprenkl/Sqlite Cthulhu Bucks! http://www.cthulhubucks.com