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