Comment mettre à jour SQLite DB sur la mise à jour de l'application iPhone?
J'ai actuellement une application pour iPhone dans l'app store d'iTunes qui utilise une base de données SQLite comme base de données. L'utilisateur peut synchroniser l'application de service web et les données retournées sont ensuite stockées dans une base de données SQLite. L'utilisateur a également la possibilité d'insérer de nouveaux éléments dans la base de données et de synchroniser leurs changements de nouveau, vers le service web.
Lorsqu'une connexion est ouverte à l'application locale de la base de données, le code vérifie pour confirmer que le fichier de base de données existe dans le dossier "Documents", si ce n'est pas la base de données est créée par le fait d'être copié à partir de la rubrique "Ressources" dossier vers le dossier "Documents".
Je dois sortir une mise à jour de l'application. La mise à jour contient les modifications de schéma de base de données (tables, colonnes, etc.). De ce que j'ai lu, les fichiers dans le dossier "Documents" répertoire persisté sur une application de mise à jour, ce qui signifie la base de données existante sera toujours intact après la mise à jour.
Ma question est, comment puis-je remplacer la base de données existante avec ma mise à jour de la base de données et est-il un moyen de le faire sans perdre les données dans la base de données existante? Est-il une sorte de "première exécution après la mise à jour de l'événement" je peux faire la mise à jour de la base de données, ou dois-je faire une certaine forme de contrôle sur la base de données existante (look pour une nouvelle colonne ou de table) et, si la vérification échoue, remplacez manuellement/mise à jour de la base de données?
Merci!
source d'informationauteur Billy
Vous devez vous connecter pour publier un commentaire.
Vous devez stocker le numéro de la version actuelle de l'application quelque part persistante -- dans la base de données ou, mieux encore dans les valeurs par Défaut de la base de données. Au démarrage, votre application va comparer son propre numéro de version avec le persisté numéro de version. Si elles diffèrent, alors que c'est la première exécution après une mise à jour. Si le persisté numéro de version n'est pas là, alors évidemment aussi c'est la première exécution après une mise à jour.
Que pour la mise à jour de votre base de données, si c'est en place, vous utiliserez l'habitude SQL ALTER commandes pour mettre à jour votre schéma, et n'importe quelle base de données de migration de données en même temps.
sqlite3 *base de données;
sqlite3_stmt *update_statement = nil;
Nous vérifier les mises à jour en interrogeant le serveur pour une valeur de hachage dans l'en-tête d'un fichier plist qui est de cracher via un fichier php qui interroge le serveur de base de données. Vous pouvez stocker que de hachage localement, et de la comparer à la dernière fois que l'application a couru. De cette façon, le téléphone sait si sa version est obsolète. Puis nous télécharger la nouvelle plist dans le fond et mise à jour de la base de données sur le téléphone.
EDIT:
À la fin de notre php, nous obtenons un MD5 de la sortie XML de l'plist nous sommes génération sur le serveur comme ceci:
Alors nous obtenons la valeur de hachage de la plist sur l'iPhone à partir de userDefaults comme suit:
Et le serveur de hachage à partir de la NSURLRequest, comme suit:
Puis on compare les deux et démarrer le téléchargement seulement si les valeurs de hachage ne correspondent pas:
Ce code est écrit par mon partenaire très compétent, Oliver Riz.