You define a callback in your CREATE statement. Why? Where is it? [EMAIL PROTECTED] wrote: > I'm a beginning sqlite user (v3.5.8 for Linux). I use a c++ program to > open a connection to my database with no issues, but when trying to > exec any sql statements after that, i get SQLITE_BUSY (i.e. database > is locked). Here is the code I use: > > int main() { > sqlite3 *db; > int ret; // Return value of sqlite3 calls > string dbName = "emails.db"; // Database name > char *zErrMsg; > > // Open a connection to the database > ret = sqlite3_open(dbName.c_str(), &db); > if (ret) { > cout << "Can't open database: " << sqlite3_errmsg(db) << endl; > sqlite3_close(db); > exit(1); > } > > string stmt = "CREATE TABLE IF NOT EXISTS"; > string cols = "Received (Sender varchar(80), Receiver varchar(80), Subject > varchar(512), Message varchar(512))"; > stmt = stmt + " " + cols; > ret = sqlite3_exec(db, stmt.c_str(), callback, 0, &zErrMsg); > if (ret != SQLITE_OK) { > cout << "SQL error: " << zErrMsg << endl; > sqlite3_free(zErrMsg); > } > > sqlite3_close(db); > } > > // Based on the example code provided at www.sqlite.org > static int callback(void *NotUsed, int argc, char **argv, char > **azColName){ > int i; > for(i=0; i<argc; i++){ > printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL"); > } > printf("\n"); > return 0; > } > > Even if I change the sql statement, I always get SQLITE_BUSY. This is > frustrating because this is a single-threaded app, so I have no idea > why the database would be locked, especially before I have called any > write operations to it (i.e. before a CREATE, INSERT, etc). Any ideas > as to why this is happening and how I can fix it? Thanks. > _______________________________________________ > sqlite-users mailing list > sqlite-users@sqlite.org > http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
_______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users