Ho un'applicazione che accede di frequente un database SQLite. E le grandi opere la maggior parte del tempo, ma di tanto in tanto in una delle mie funzioni di database non riesce e restituisce:file casuale SQLite è crittografato o non è un database
file è crittografato o non è un database
non ho alcuna crittografia abilitato ma non posso per capire come sta succedendo. Non è riproducibile in modo coerente e dai registri degli arresti anomali, si verifica sul thread principale.
Grazie in anticipo.
@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;
}
Versione non corrispondente forse? – CodaFi
ho chiesto a google e la risposta più popolare è la mancata corrispondenza della versione, ma non capisco come questo possa accadere solo qualche volta per questa query ... post aggiornato con codice di esempio – VTS12
@CodaFi - Sono abbastanza sicuro che la versione del file SQLite non è cambiato in modo incompatibile in un certo numero di anni. "La mancata corrispondenza della versione" è la solita spiegazione offerta, ma non spiega nulla. –