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.