J'ai donc travaillé sur ce projet depuis un petit moment maintenant. Je n'ai aucun problème avec la lecture des données de la base de données, et le formatage dans UITableViews et quoi d'autre. Mais maintenant je veux aussi écrire à la DB. Le problème est que je continue d'obtenir une erreur "Database is Locked" de sqlite. Après avoir déconné avec la version originale, j'ai eu le moment de faire face à ma paume en réalisant que ma base de données était dans le paquet et donc pas inscriptible. J'ai donc déplacé la base de données dans le dossier Apps Documents, qui est accessible en écriture. Mais maintenant, je reçois toujours la même erreur sql "Database is Locked". Je n'ouvre et ne ferme la DB que lorsque c'est nécessaire. Et pour autant que je sache, je ne le laisse pas ouvert n'importe où. Voici le code où je veux faire des mises à jour. Des pensées?iPhone sqlite3 verrouillé, ne peut que lire, ne pas écrire
- (BOOL) loanBookTo:(NSString *)newborrower{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"books.sqlite"];
if([[NSFileManager defaultManager] fileExistsAtPath:path]){
NSLog(@"File Exists at: %@", path);
}
if (sqlite3_open([path UTF8String], &database) == SQLITE_OK) {
NSString *mySQL = @"UPDATE BOOKS SET LOANED = 1, BORROWER = \"<BORROWER>\" where ISBN = \"<ISBN>\"";
mySQL = [mySQL stringByReplacingOccurrencesOfString:@"<ISBN>" withString:self.isbn];
mySQL = [mySQL stringByReplacingOccurrencesOfString:@"<BORROWER>" withString:newborrower];
const char *sql = [mySQL UTF8String];
char* errmsg;
sqlite3_exec(database, sql, NULL, NULL, &errmsg);
// Q. Database is locked. Why?
// A. Because it is in the Bundle and is ReadOnly.
// Need to write a copy to the Doc folder.
// Database is Locked error gets spit out here.
printf(errmsg);
sqlite3_close(database);
}
return NO;
}
Où se trouve la base de données, dans le regroupement d'applications ou le répertoire de documents? – zaph