La difficulté dans la mise à niveau de SQlite table
J'ai une application en cours d'exécution avec une table de travail appelé ANIMAL. Lors de la première création de ce tableau, il consistait simplement à _id et animal_name colonnes.
Maintenant, je suis en train de développer sur elle, y compris un animal_biography colonne, cependant, je vais avoir un peu de difficulté.Au début, j'ai pensé que j'étais juste un cas de mise à jour de mon CREATE_TABLE déclaration d'inclure l'animal bio:
private static final String DATABASE_CREATE =
"create table " + ANIMALS_TABLE +
" (_id integer primary key autoincrement, " +
"animal_name text not null, " +
"biography text not null);";
cependant, en regardant le logcat il me dit que la colonne biographie n'existe pas lorsque vous tentez d'insérer en elle.
Maintenant, j'ai essayé de mettre à niveau la base de données à l'aide de la onUpgrade()
et y compris le code
db.execSQL("ALTER TABLE" + DATABASE_NAME);
db.execSQL(DATABASE_CREATE);
mais ce n'est pas résoudre le problème. Quelqu'un aurait-il une quelconque des pointeurs sur la façon d'aller sur la résolution de ce problème?
Vous pouvez supprimer le fichier de base de données en utilisant simplement DDMS navigateur de fichiers.
OriginalL'auteur Php Pete | 2011-04-16
Vous devez vous connecter pour publier un commentaire.
Si vous utilisez
SQLiteOpenHelper
il est facile de passer d'une table. Vous avez besoin de mettre en œuvre des méthodesonCreate
etonUpgrade
et de fournir la version actuelle de votre base de données dans le constructeur de la classe. Lors de la mise à jour de votre table d'incrémentation de la base de données de numéro de version, spécifiez la nouvelle création de la table de requête dansonCreate
méthode et de mettreALTER TABLE
àonUpgrade
méthode de mise à jour de la version précédente de la table. Quand Android détecte la version de base de données de discordance, il va appeleronUpgrade
méthode automatiquement. Voir l'exemple:Cette méthode de mise à jour est la bonne façon de modifier les tables sans perdre les données de l'utilisateur, en particulier si l'application a été publié pour le public déjà.
merci pour votre réponse, qui m'a beaucoup aidé. Cependant, cet exemple ne fonctionne pas, que vous ne pouvez pas ajouter de "not null" colonne sans spécifier de valeur par défaut, comme: "AJOUTER une COLONNE biographie text not null default default_biography"
J'ai le même problème et j'ai déjà mis en œuvre méthode ci-dessus, j'ai changé le numéro de version, log/debug montre également que onUpgrade est appelé, et pas d'exception à tous (je suppose que c'exécutée avec succès, les requêtes). mais lorsque j'essaie de charger les éléments (pour le moment il n'y a pas de dossiers que j'ai laissé tomber de la table et de la re-création) Ça en jette toujours l'exception de la nouvelle colonne n'existe pas. la désinstallation de l'application a également aucun effet.
Afin de changer la valeur de la version transmis est ce que les signaux de la OpenHelper pour aller à onUpgrade? Et c'est bien de changer de "créer des tableaux de chaînes de caractères une fois que vous avez incrémenté aussi longtemps que l'alter tables méthode est inclus dans le onUpgrade? Veuillez vous assurer que je ne suis pas encore mélangé, j'ai juste besoin de préciser
OriginalL'auteur GrAnd