I am getting an error with sqlite3_prepare_v2

ios, iphone, sqlite, xcode4

Solution

`sqlite3_prepare_v2()` doesn't return boolean, so testing its return value with `!` is wrong. From the reference:

On success, the sqlite3_prepare() family of routines return SQLITE_OK; otherwise an error code is returned.

So your code should look more like this:

if (sqlite3_prepare_v2(database, sql, -1, &updateStmt, NULL) == SQLITE_OK)
{
    if (sqlite3_bind_text(updateStmt, 1, [updateType UTF8String], -1,
        SQLITE_TRANSIENT) == SQLITE_OK)
    {
        ... call update API ...
    }
    else
    {
        NSLog(@"Error while binding variable. '%s'", sqlite3_errmsg(database));
    }
}
else
{
    NSLog(@"Error while creating update statement. '%s'", sqlite3_errmsg(database));
}

EDIT (after the question was updated with the whole query):

I don't like the look of the ` characters in the query; remove them and it should work.

Problem

I am creating an app, and doing update with sqlite. Here is my piece of code given below: ``` NSFileManager *fileMgr = [NSFileManager defaultManager]; NSString *dbPath = [[[NSBundle mainBundle] resourcePath ]stringByAppendingPathComponent:@"appforoffice.sqlite"]; BOOL success = [fileMgr fileExistsAtPath:dbPath]; if(!success) { NSLog(@"Cannot locate database file '%@'.", dbPath); } if(!(sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK)) { NSLog(@"An error has occured."); } const char *sql = "UPDATE settings SET `value`='Off' WHERE `type`=?"; if(sqlite3_prepare_v2(database, sql, -1, &updateStmt, NULL) == SQLITE_OK) { if(sqlite3_bind_text(updateStmt, 1, [updateType UTF8String], -1, SQLITE_TRANSIENT) == SQLITE_OK) { if(sqlite3_step(updateStmt) == SQLITE_DONE) { NSLog(@"Update Done successfuly"); } else { NSLog(@"Error while updating. '%s'", sqlite3_errmsg(database)); } sqlite3_finalize(updateStmt); sqlite3_close(database); } else { NSLog(@"Error while binding variable. '%s'", sqlite3_errmsg(database)); } } else { NSLog(@"Error while creating update statement. '%s'", sqlite3_errmsg(database)); } ``` But guys, I am not getting any error. But the problem is that, the database table is not being effected by the query. I am sure the query is perfectly alright. I am confused about the problem, can't find any way to get out of this.

Original source