我有一个经常访问 sqlite 数据库的应用程序。它大部分时间都很好用,但偶尔在我的一个数据库函数中失败并返回:
文件已加密或不是数据库
我没有启用任何加密,但我无法确定这是如何发生的。它不能始终如一地重现,并且从崩溃日志中,它发生在主线程上。
提前致谢。
@synchronized(self) {
sqlite3 *database = mydb;
int result = 0;
static sqlite3_stmt *stmt = nil;
if (stmt == nil) {
const char *sql = "select sum(not isAvailable) from table1 e inner join table2 f on e.key=f.pk where f.pk=? AND e.isDeleting=0;";
if (sqlite3_prepare_v2(database, sql, -1, &stmt, NULL) != SQLITE_OK) {
NSAssert1(0, @"Error: failed to prepare statement with message '%s'.", sqlite3_errmsg(database));
}
}
sqlite3_bind_int(stmt, 1, obj.primaryKey);
if (sqlite3_step(stmt) == SQLITE_ROW) {
int val = sqlite3_column_int(stmt, 0);
result = val;
} else {
[NSException raise:@"SQL Fail" format:@"SQL Failed: %s", sqlite3_errmsg(database)];
}
// Reset the statement for future reuse.
sqlite3_reset(stmt);
return result;
}