A partir des sqlite3 docs il semble que je devrais pouvoir utiliser la syntaxe suivante pour mettre à jour une ligne dans une base de données sur mon iPhone:de mise à jour de la syntaxe de la ligne
NSString *dbFile = [[NSBundle mainBundle] pathForResource:@"database" ofType:@"db"];
sqlite3 *database = NULL;
if (sqlite3_open([dbFile UTF8String], &database) == SQLITE_OK) {
NSString *sql = [NSString stringWithFormat:@"update mytable set myfirstcolumn=%d, mysecondcolumn=%d where id=%d", int1, int2, int3];
sqlite3_exec(database, [sql UTF8String], MyCallback, nil, nil);
}
sqlite3_close(database);
Mais il ne met pas à jour la base de données ou même appeler la méthode de rappel. Est-ce juste la mauvaise syntaxe, comme dans sqlite3_exec() ne peut pas effectuer une mise à jour par exemple?
Dans mon exemple, tous les noms de colonnes sont corrects et les trois valeurs int grume comme les valeurs correctes, donc je suis un peu d'idées ...
Merci.
Salut, Je viens de vérifier le code d'erreur et il retourne 8 (SQLITE3_READONLY) qui est un point de départ pour moi d'explorer maintenant. Je n'ai pas réalisé que les fichiers dans le paquet étaient en lecture seule. Une idée où et comment placer le fichier de base de données dans une zone de lecture-écriture? –
De même, dois-je avoir une seule instance de la base de données, disons dans le délégué de l'application, que toutes les autres classes accèdent? Accéder à la base de données en utilisant le code comme ci-dessus dans mon message d'origine de différentes classes continuerait à créer une nouvelle instance de la base de données d'origine et remplacer tous les nouveaux changements, non? –
@I Hemstock - Vous n'êtes pas obligé d'avoir une seule instance de base de données, mais il est probablement logique de le faire. Généralement, vous avez une seule instance de base de données par thread. Les modifications de la base de données seront partagées entre tous les objets d'instance de base de données de votre application. C'est ainsi que SQLite est conçu. –