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.