AJOUTER COLONNE à sqlite db SI PAS EXISTE - flex / air sqlite?
J'ai un flex/air app j'ai travaillé, il utilise un local de base de données sqlite qui est créé sur le premier démarrage de l'application.
J'ai ajouté quelques fonctionnalités de l'application et dans le processus, j'ai dû ajouter un nouveau champ à l'une des tables de base de données. Ma questions est de savoir comment je faire pour obtenir l'application pour créer un nouveau champ qui se trouve dans une table qui existe déjà?
c'est une ligne qui crée la table
stmt.text = "CREATE TABLE IF NOT EXISTS tbl_status ("+"status_id INTEGER PRIMARY KEY AUTOINCREMENT,"+" status_status TEXT)";
Et maintenant, je voudrais ajouter un status_default champ.
merci!
Grâce - MPelletier
J'ai ajouter le code que vous avez fourni et il le fait d'ajouter le champ, mais maintenant, la prochaine fois que je redémarre mon application, j'obtiens une erreur - 'status_default' existe déjà.
Alors, comment puis-je aller sur l'ajout de quelque sorte d'une SI n'EXISTE PAS de déclaration à la ligne que vous avez fourni?
source d'informationauteur Adam
Vous devez vous connecter pour publier un commentaire.
http://www.sqlite.org/lang_altertable.html
Cela étant dit, l'ajout de colonnes dans SQLite est limitée. Vous ne pouvez pas ajouter une colonne n'importe où, mais après la dernière colonne de votre tableau.
Comme pour vérifier si la colonne existe déjà,
PRAGMA table_info(tbl_status);
retournera un tableau listant les différentes colonnes de votre tableau.AJOUTER SUR:
J'ai été en utilisant une stratégie de conception de base de données qui me permet de distinguer les modifications qui sont nécessaires. Pour cela, vous aurez besoin d'une nouvelle table (appeler
DBInfo
), avec un champ (Entier, de l'appelerSchemaVersion
). Alternativement, il est également une valeur interne dans SQLite, appeléuser_version
qui peut être réglée avec unePRAGMA
de commande. Votre code peut, au démarrage du programme, vérifier les numéro de version de schéma et d'appliquer les modifications en conséquence, une version à la fois.Supposons qu'une fonction nommée
UpdateDBSchema()
. Cette fonction recherche de votre schéma de base de données version, poignée DBInfo pas être là, et de déterminer que la base de données est dans la version 0. Le reste de cette fonction pourrait être juste un grand commutateur avec des versions différentes, imbriquée dans une boucle (ou autre structure à la disposition de votre plate-forme de choix).Donc pour cette première version, ont un
UpgradeDBVersion0To1()
fonction, ce qui permettra de créer cette nouvelle table (DBInfo
), ajoutez vosstatus_default
champ, et de définirSchemaVersion
à 1. Dans votre code, ajouter une constante qui indique la dernière version du schéma, de direLATEST_DB_VERSION
et de lui 1. De cette façon, votre code et de votre base de données ont une version de schéma, et vous savez que vous avez besoin de synchroniser si elles ne sont pas égaux.Lorsque vous avez besoin de faire un autre changement à votre schéma, définir la
LATEST_DB_VERSION
constante à 2 et en faire une nouvelleUpgradeDBVersion1To2()
fonction qui va effectuer les changements nécessaires.De cette façon, votre programme peut être porté facilement, peut se connecter à et de mise à niveau d'une ancienne base de données, etc.
Je sais que c'est une vieille question... cependant.
J'ai atteint ce problème précis dans l'SQLite mise en œuvre dans Adobe AIR. J'ai pensé qu'il serait possible d'utiliser le PRAGMA commande à résoudre, mais depuis que adobe air est mise en œuvre ne prend pas en charge le PRAGMA commande, nous avons besoin d'une alternative.
Ce que j'ai fait, je pensais qu'elle serait la peine alors que le partage ici, est-ce:
Espère que cela aide quelqu'un.
J'ai résolu un problème similaire à l'aide de la réponse de cette question:
ALTER TABLE ADD COLONNE SI elle n'EXISTE PAS dans SQLite
Utiliser construite en user_version paramètre de garder une trace de vos mises à jour. Vous définissez à l'aide de:
et vous récupérer à l'aide de
Donc, fondamentalement, récupérer user_version (0 par défaut), vérifier si elle est de 0. Si oui, effectuer vos mises à jour et de lui 1. Si vous avez plus de mises à jour à l'avenir, vérifier si c'est 1, effectuer des mises à jour et mettre à 0. Et ainsi de suite...
Dans certains cas, j'ai l'exécution de la commande et obtenir de l'exception pour "double colonne". Juste une solution rapide, pas l'idéal.