Question

J'ai une application sur le marché, et une mise à jour que je veux ajouter quelques colonnes à la base de données. Pas de problème jusqu'à présent. Mais je veux détecter si la base de données en cours d'utilisation est manquant ces colonnes, et les ajouter si tel est le cas. J'ai besoin que cela soit fait de façon dynamique et non pas seulement après la mise à jour vers la nouvelle version, car l'application est censée être toujours en mesure d'importer des bases de données plus anciennes. Normalement, je serais en mesure d'utiliser le PRAGMA requête, mais je ne suis pas sûr comment faire avec Android. Je ne peux pas utiliser execSQL car il est une requête, et je ne peux pas comprendre comment utiliser PRAGMA avec la requête () -. Fonction

Ofcourse je pouvais attraper des exceptions, puis ajouter la colonne, ou toujours ajouter les colonnes à chaque table avant que je commence à travailler avec, mais ce n'est pas une solution propre.

Cheers,

Était-ce utile?

La solution

Pragma fonctionne. À titre d'exemple, je viens d'essayer sur un de mes Android App BDs.

sqlite> pragma table_info (userCommand);

cid name        type    notnull     dflt_value  pk
0   id      INTEGER     0       1
1   description TEXT    0       0
2   message     TEXT    0       0

Comme on peut le voir, il y a trois champs dans la table spécifiée. id, la description et le message.

dans votre application, utilisez quelque chose comme:

Cursor c = null;
c = RawQuery ("pragma table_info (userCommand)",null); 
// if c has records and is not null then iterate through the records in search of your table name. 

S'il vous plaît excuser le formatage pauvres.

Autres conseils

Cela peut être exagéré, mais vous pouvez sélectionner une seule ligne de votre table dans un curseur et utiliser Cursor.getColumnIndex ([nom de la colonne sous forme de chaîne]). Ceci renvoie -1 si elle n'existe pas.

Essayez d'utiliser PRAGMA avec rawQuery() au lieu de query().

Vous pourriez émettre la commande suivante et passer en revue les résultats et voir si votre colonne est répertorié.

pragma table_info(table_name);

Modifier Je ne l'ai jamais fait cela sur Android, mais je pense que cela devrait fonctionner

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top