Je prévois d'écrire une version gratuite et une version complète d'un logiciel. Je souhaite que les informations stockées dans la version gratuite du logiciel soient également accessibles par la version complète (je ne souhaite pas utiliser Content Providers). Et je veux également m'assurer que ces données ne sont pas perdues lorsque le logiciel est mis à jour. Comment puis-je y parvenir?Conserver les informations persistantes sur différentes versions du logiciel
2
A
Répondre
2
Vous devez mettre en œuvre une méthode intelligente de mise à niveau pour vos aides sqlite.
Vous devez toujours disposer de la nouvelle requête de création de table et l'utiliser pour la mise à niveau et le transfert des données existantes. Remarque: les méthodes onUpgrade s'exécutent une fois pour votre objet d'assistance sqlite et vous devez gérer toutes les tables qu'il contient.
Alors ce qui est recommandé onUpgrade:
- beginTransaction
- exécuter une création de table avec
if not exists
(nous faisons une mise à niveau, de sorte que le tableau pourrait existe pas encore, il échouera aussi modifier et supprimer) - mettre dans une liste les colonnes existantes
List<String> columns = DBUtils.GetColumns(db, TableName);
- table de sauvegarde (
ALTER table " + TableName + " RENAME TO 'temp_" + TableName
) - créer un nouveau tableau (le plus récent tableau de schéma de création)
- obtenir l'intersection avec les nouvelles colonnes, ces colonnes de temps pris de la table mis à jour (
columns.retainAll(DBUtils.GetColumns(db, TableName));
) - restaurer les données (
String cols = StringUtils.join(columns, ","); db.execSQL(String.format( "INSERT INTO %s (%s) SELECT %s from temp_%s", TableName, cols, cols, TableName));
) - supprimer table de sauvegarde (
DROP table 'temp_" + TableName
) - setTransactionSuccessful
(Cela ne gère pas downgrade de table, si vous renommez une colonne, vous ne recevez pas les données existantes transférées que les noms ne correspondent pas à la colonne).
.
public static List<String> GetColumns(SQLiteDatabase db, String tableName) {
List<String> ar = null;
Cursor c = null;
try {
c = db.rawQuery("select * from " + tableName + " limit 1", null);
if (c != null) {
ar = new ArrayList<String>(Arrays.asList(c.getColumnNames()));
}
} catch (Exception e) {
Log.v(tableName, e.getMessage(), e);
e.printStackTrace();
} finally {
if (c != null)
c.close();
}
return ar;
}
public static String join(List<String> list, String delim) {
StringBuilder buf = new StringBuilder();
int num = list.size();
for (int i = 0; i < num; i++) {
if (i != 0)
buf.append(delim);
buf.append((String) list.get(i));
}
return buf.toString();
}
Questions connexes
- 1. Comment conserver un seul XPO sur différentes versions?
- 2. Comment déboguer les anciennes versions du logiciel?
- 3. différences entre cellules différentes entre les différentes versions de IE
- 4. Chargement de différentes versions du même assemblage
- 5. Conflits trouvés entre les différentes versions du même assemblage dépendant
- 6. Test sur différentes versions de PHP
- 7. HttpWebRequest authentifié avec redirection, informations d'identification persistantes?
- 8. EJB2 sur différentes versions de JBoss
- 9. Synchronisation de différentes versions d'objets
- 10. Différentes versions de bibliothèques C++
- 11. Application pour différentes versions et différentes résolutions
- 12. Client JMX pouvant conserver les informations collectées
- 13. Exécution Différentes versions de Unity
- 14. Comment puis-je obtenir les informations sur le logiciel à partir du registre Windows?
- 15. Benchmarks du code généré par différentes versions de g ++
- 16. Déploiement de cx_Oracle sur différentes versions d'Oracle Client
- 17. Compatibilité du système d'exploitation pour différentes versions de .NET Framework
- 18. Conversion de types identiques de différentes versions du même assemblage
- 19. Présentation dynamique de différentes versions d'une application
- 20. Création de 2 versions différentes du même assemblage
- 21. Uploading to the cheeseshop différentes versions d'un paquet pour différentes versions de Python
- 22. Compatibilité iPhone App entre différentes versions d'OS
- 23. Firefox, un navigateur, mais deux versions différentes?
- 24. Informations sur les constantes du crochet
- 25. Comment expliquer les différentes versions .NET à quelqu'un?
- 26. Oracle: Utiliser deux versions différentes d'EXP sur la même machine?
- 27. Les différentes versions de support Android et XPath
- 28. édition du logiciel d'installation du logiciel
- 29. Conserver les informations d'enregistrement personnalisées avec l'API de profil
- 30. y compris différentes versions d'en-têtes désinvoltes
Je vais essayer cela et vous reviendrai @ Pentium10. Merci! –
A travaillé pour moi @ Pentium10 –