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 :

Modifier base sqlite3


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 62
    Par défaut Modifier base sqlite3
    Bonjour

    dans mon application j'ai une base sqlite3 et tout fonctionne parfaitement mais j'ai un souci pour la mettre à jour lorsque je la modifie dans le répertoire asset.
    Pour etre splus clair j'ai une version de la banque avec 2 enregistrements, je teste tout fonctionne. Je mets dans mon repertoire asset une nouvelle version de la base avec cette fois 3 enregistrements je change le numéro de la base mais cela n'efface pas la base pour la remplacer par la nouvelle... je ne comprends pas car dans la vérif si la base existe je ne vois pas comment mettre un code qui teste le numéro de la base.

    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
     
    //****************************
    	public static String DB_PATH;
    	//****************************
    	public static String DB_NAME;
    	public SQLiteDatabase database;
    	public final Context context;
    	private static final String spots = "spots";
    	public static final int DATABASE_VERSION = 3;
                 // c'est ici que je change le numéro de la base en 4 5 6 etc... là c'est la 3
     
    	public SQLiteDatabase getDb() {
    		return database;
    	}
     
    	public ExternalDbOpenHelper(Context context, String databaseName) {
    		super(context, databaseName, null, DATABASE_VERSION);
    		this.context = context;
    		String packageName = context.getPackageName();
    		DB_PATH = String.format("//data//data//%s//databases//", packageName);
    		DB_NAME = databaseName;
    		openDataBase();
    	}
     
    	public void createDataBase() {
    		boolean dbExist = checkDataBase();
    		if (!dbExist) {
    			this.getReadableDatabase();
    			try {
    				copyDataBase();
    			} catch (IOException e) {
    				Log.e(this.getClass().toString(), "Erreur pendant la copie de la base");
    				throw new Error("Erreur pendant la copie de la base!");
    			}
    		} else {
    			Log.i(this.getClass().toString(), "La base de donnée existe déja");
                                          // c'est par ici que je dois je pense mettre une bout de code pour tester le différenciel du numéro de version de la base mais je ne vois pas comment...
    		}
    	}
     
    	private boolean checkDataBase() {
    		SQLiteDatabase checkDb = null;
    		try {
    			String path = DB_PATH + DB_NAME;
    			checkDb = SQLiteDatabase.openDatabase(path, null,
    					SQLiteDatabase.OPEN_READONLY);
    		} catch (SQLException e) {
    			Log.e(this.getClass().toString(), "Erreur pendant la vérification de la base");
    		}
     
    		if (checkDb != null) {
    			checkDb.close();
    		}
    		return checkDb != null;
    	}
     
    	private void copyDataBase() throws IOException {
     
    		InputStream externalDbStream = context.getAssets().open(DB_NAME);
    		String outFileName = DB_PATH + DB_NAME;
    		OutputStream localDbStream = new FileOutputStream(outFileName);
     
    		byte[] buffer = new byte[1024];
    		int bytesRead;
    		while ((bytesRead = externalDbStream.read(buffer)) > 0) {
    			localDbStream.write(buffer, 0, bytesRead);
    		}
    		localDbStream.close();
    		externalDbStream.close();
    	}
     
    	public SQLiteDatabase openDataBase() throws SQLException {
    		String path = DB_PATH + DB_NAME;
    		if (database == null) {
    			createDataBase();
    			database = SQLiteDatabase.openDatabase(path, null,
    				SQLiteDatabase.OPEN_READWRITE);
    		}
    		return database;
    	}
    	@Override
    	public synchronized void close() {
    		if (database != null) {
    			database.close();
    		}
    		super.close();
    	}
    	@Override
    	public void onCreate(SQLiteDatabase db) {}
    	@Override
    	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    		Log.e(this.getClass().toString(), "Mise à jour de la base " + oldVersion + " vers " + newVersion );
    		database.execSQL("DROP TABLE IF EXISTS  " + spots + ";");
    		// c'est là que normlement je devrais effacer la table spots pour la remplacer mais cela ne fonctionne pas
     
     
    		onCreate(database); //Creates a new one 
    	}
    }
    Merci d'avance pour votre aide.

  2. #2
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Par défaut
    Je ne vois pas la fonction onUpgrade qui permet justement de mettre à jour ton changement de base de données à l'aide de ta version. Dans cette fonction, à toi de supprimer ta base et de la recréer en appelant ton onCreate.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 62
    Par défaut
    la fonctione onupgrade est en bas du code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    @Override
    	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    		Log.e(this.getClass().toString(), "Mise à jour de la base " + oldVersion + " vers " + newVersion );
    		database.execSQL("DROP TABLE IF EXISTS  " + spots + ";");
    		// c'est là que normlement je devrais effacer la table spots pour la remplacer mais cela ne fonctionne pas
     
     
    		onCreate(database); //Creates a new one 
    	}
    }
    Le souci est que même en changeant la version en dur sur la base donnée rien ne se passe le onUpgrade n'est jamais appelé vu que je ne vois jamais dans la logcat le message "Mise à jour..."

  4. #4
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Par défaut
    Oui effectivement.

    On parle de ce problème ici.

    C'est un sujet intéressant, j'attend de tes retour.

Discussions similaires

  1. [AJAX] Modifie base de donnes onclik
    Par toams69 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 02/11/2008, 22h49
  2. [SQLite] UDF pour une base SQLite3
    Par BakaOnigiri dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 11/06/2007, 19h56
  3. Modifier base oracle via script ksh
    Par donny dans le forum Linux
    Réponses: 6
    Dernier message: 25/07/2006, 17h16
  4. Réponses: 4
    Dernier message: 19/01/2006, 14h35
  5. [VB6] Zone de liste modifiable basée sur un champ
    Par pepper dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 27/11/2002, 13h41

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