sqlite データベースに頻繁にアクセスするアプリケーションがあります。ほとんどの場合はうまく機能しますが、データベース関数の 1 つが失敗して次のように返されることがあります。
ファイルは暗号化されているか、データベースではありません
暗号化を有効にしていませんが、これがどのように起こっているかを特定できません。一貫して再現できるわけではなく、クラッシュ ログから、メイン スレッドで発生します。
前もって感謝します。
@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;
}