I've got an iPhone app I'm developing and when the app launches I open an SQLite database connection, and I close it when the application terminates. The database is in the application documents folder.
During the lifetime of the app I run several INSERT
and UPDATE
statements. However, for some reason my UPDATE
statements are not saving properly once the application is closed and then restarted. I am calling sqlite3_prepare_v2
, sqlite3_step
and sqlite3_finalize
properly so I'm sure the transactions should be finalized. I've added breakpoints on all those 3 functions and they are all being hit okay and all returning the correct values.
When I close the application after an update and look in the documents directory I can see another database file with -journal after it. Does this mean something's not working properly transaction wise?
I've also noticed that in my applicationWillTerminate:
method where I close the connection using sqlite3_close()
, that it is returning SQLITE_BUSY
. Why could this be?
I've been struggling for a whole day now so I really hope someone can point me in the right direction!
Here's my code to perform my update queries:
// Update statement sqlite3_stmt *stmt; char *query = "UPDATE records SET fielda = ? WHERE pkfield = ?;"; if (sqlite3_prepare_v2(database, query, -1, &stmt, nil) == SQLITE_OK && // Bind sqlite3_bind_text(stmt, 1, [myNSStringVar UTF8String], -1, nil) == SQLITE_OK && sqlite3_bind_int(stmt, 2, recordID) == SQLITE_OK) { // Execute int ret = sqlite3_step(stmt); if (ret == SQLITE_DONE) { sqlite3_finalize(stmt); } }