IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Mise à jour SQLITE


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Caranille
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2013
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2013
    Messages : 117
    Par défaut Mise à jour SQLITE
    Bonjour,

    J'ai actuellement une application Android qui est sur le PlayStore et auquel certaines personnes (sur invitation) peuvent l'essayer, hors depuis cette version j'ai fait quelques mise à jour sur SQLITE et je me vois mal leur dire (Faut vider les données de l'application car la base n'est pas bonne) vous allez me dire pourquoi ne pas faire un script SQL qui arrange la chose ? Sauf que je ne sais pas si tout le monde à la dernière version et que si certaines personnes ont une version plus antérieur il y a encore eu des modification.

    En gros je résume avec une fausse table

    Version 0.1, Table Account avec ID, Pseudo;
    Version 0.2 Table Account avec ID, Pseudo, Email, Access;
    Version 0.3 Table Account avec ID, Access, Pseudo, Email;

    Comment faire un script qui quelques soit la version soit bon ? Un peu comme Symfony (Le frameWork PHP) qui annalyse la BDD et génère lui même le script de modification en fonction de la version

    Bien cordialement

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Si tu as travaillé comme il faut tu dois normalement avoir créer une classe qui hérite de SQLiteOpenHelper et qui implémente les 3 méthodes onOpen() , onCreate() et onUpgrade().

    Et donc en principe à chaque fois que tu appel cette classe tu lui passe un numéro de version de la base qui doit être incrémenté à chaque fois que ta base change.

    Il est donc très facile dans onUpgrade() de réaliser les script de migration d'une version à une autre.

    Un exemple complet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    public class DbHelper extends SQLiteOpenHelper 
    {
     
    	public DbHelper(Context context, String name, CursorFactory factory,int version) 
    	{
    		super(context, name, factory, version);
    	}
     
    	@Override
    	public void onOpen(SQLiteDatabase db) {
    		super.onOpen(db);
     
    	}
     
    	@Override
    	/**
             * Création de la base de données si elle n'exsite pas
             */
    	public void onCreate(SQLiteDatabase db) 
    	{
    		//Création de la base
    	}
     
    	@Override
    	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
    	{
    		int upgradeTo = oldVersion +1;
    		while(upgradeTo <= newVersion)
    		{
    			switch (upgradeTo)
    			{
    				case 3 :
    					upgradeTo3(db);
    					break;
    				case 4 : 
    					upgradeTo4(db);
    					break;
    				case 5 : 
    					upgradeTo5(db);
    					break;
    			}
     
    			upgradeTo ++;
    		}
    	}
    }
    les fonctions upgradeToX() ne font que executer les requêtes qui permettent de passer d'une version à une autre.

    Avec ce code quelque soit la version de la base de l'utilisateur il est en mesure de mettre à jour vers la dernière version.

    Si tu n'as rien prévu de tout ca (en particulier si le numéro de version de ta base est tjrs le même) ça va être plus compliqué
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé Avatar de Caranille
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2013
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2013
    Messages : 117
    Par défaut
    Bonjour,

    Voici le squelette de DBManage.java

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    package com.caranille.myownpet.DB;
     
    import android.content.Context;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteOpenHelper;
     
    public class DBManage extends SQLiteOpenHelper {
     
        private static final String DATABASE_NAME = "DDB.db";
        private static final int DATABASE_VERSION = 1;
     
        private static final String DATABASE_CREATE_Trainer = "CREATE TABLE IF NOT EXISTS MOP_Trainers (" +
        ***)";
     
        private static final String DATABASE_CREATE_Pets = "CREATE TABLE IF NOT EXISTS MOP_Pets (" +
        ***)";
     
        public DBManage(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }
     
        @Override
        public void onCreate(SQLiteDatabase database) {
            database.execSQL(DATABASE_CREATE_Pets);
            database.execSQL(DATABASE_CREATE_Trainer);
        }
     
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            onCreate(db);
        }
    }
    Donc en gros il faut que je travail sur onUpgrade ^^ j'avais pas trop comprit le principe mais merci ^^

  4. #4
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    C'est ca, il faut dans onUpgrade gérer les évolutions de ta base et non pas lancer onCreate comme dans ton exemple
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Réponses: 8
    Dernier message: 18/07/2014, 11h56
  2. Tester la mise à jour de la base sqlite
    Par grunk dans le forum Android
    Réponses: 4
    Dernier message: 12/06/2012, 11h34
  3. Mise à jour bibliothèque sqlite sous linux
    Par ovni76 dans le forum SQLite
    Réponses: 0
    Dernier message: 08/03/2011, 10h35
  4. [Lazarus] Mise à jour affichage DbGrid et table Sqlite
    Par ovni76 dans le forum Lazarus
    Réponses: 1
    Dernier message: 31/03/2010, 08h16
  5. Mise à jour d'une Table-Sqlite pendant son parcours
    Par fadsys dans le forum PureBasic
    Réponses: 1
    Dernier message: 02/10/2009, 13h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo