我有一个经常访问sqlite数据库的应用程序。它的伟大工程的大部分时间,但偶尔会在我的数据库功能之一失败并返回: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;
}
版本不匹配或许? – CodaFi 2013-02-16 07:45:48
我问谷歌和最流行的答案是版本不匹配,但我不明白如何才可能发生这种事情只有有时候这个查询...更新后的示例代码 – VTS12 2013-02-17 15:39:02
@CodaFi - 我敢肯定,SQLite文件版本在多年的时间里并没有以不相容的方式改变。 “版本不匹配”是通常提供的解释,但它不能解释任何内容。 – 2013-02-17 15:47:15