Bonjours chers développeurs,

Je me mord la langue depuis bientôt une semaine avec mon appli que je developpe en utilisant Androïde Studio 2.2.3 avec l'émulateur Genymotion.
je me suis confronté à un problème de changement de version parce que à chaque fois, j'ajoute des tables ou je change de type de champ et à chaque ajout ou changement, je change de version ().
La dernière fois ou l'appli refuse de fonctionner, j'ai voulu ajouté deux tables departement et sous_prefecture sur les deux qui existaient déjà dans ma base lorsqu'elle fonctionnait bien donc pays et region.

Voici à quoi ressemble ma classe DBAdapter

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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
public class DBAdapter {
 
    myDbHelper myhelper;
    public DBAdapter(Context context)
    {
        myhelper = new myDbHelper(context);
    }
 
    public long insertDatapays(String code_pays, String nom_pays)
    {
        SQLiteDatabase dbb = myhelper.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put(myDbHelper.CODE_PAYS, code_pays);
        contentValues.put(myDbHelper.NOM_PAYS, nom_pays);
        long id = dbb.insert(myDbHelper.TABLE_PAYS, null , contentValues);
        return id;
    }
 
    public long insertDataRegion(String code_reg, String nom_reg, String fk_pays)
    {
        SQLiteDatabase dbb = myhelper.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put(myDbHelper.CODE_REGION, code_reg);
        contentValues.put(myDbHelper.NOM_REGION, nom_reg);
        contentValues.put(myDbHelper.FK_PAYS, fk_pays);
        long id = dbb.insert(myDbHelper.TABLE_REGION, null , contentValues);
        return id;
    }
    public long insertDataDepart(String code_dep, String nom_dep, String fk_region)
    {
        SQLiteDatabase dbb = myhelper.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put(myDbHelper.CODE_DEPARTEMENT, code_dep);
        contentValues.put(myDbHelper.NOM_DEPARTEMENT, nom_dep);
        contentValues.put(myDbHelper.FK_REGION, fk_region);
        long id = dbb.insert(myDbHelper.TABLE_DEPARTEMENT, null , contentValues);
        return id;
    }
 
    public long insertDataSouspref(String code_sp, String nom_sp, String fk_depart)
    {
        SQLiteDatabase dbb = myhelper.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put(myDbHelper.CODE_SOUSPREF, code_sp);
        contentValues.put(myDbHelper.NOM_SOUSPREF, nom_sp);
        contentValues.put(myDbHelper.FK_DEPARTEMANT, fk_depart);
        long id = dbb.insert(myDbHelper.TABLE_SOUSPREF, null , contentValues);
        return id;
    }
 
    public String getDatapays()
    {
        SQLiteDatabase db = myhelper.getWritableDatabase();
        String[] columns = {myDbHelper.ID_PAYS,myDbHelper.CODE_PAYS,myDbHelper.NOM_PAYS};
        Cursor cursor =db.query(myDbHelper.TABLE_PAYS,columns,null,null,null,null,null);
        StringBuffer buffer= new StringBuffer();
    while (cursor.moveToNext())
    {
        int id_pays =cursor.getInt(cursor.getColumnIndex(myDbHelper.ID_PAYS));
        String code_pays =cursor.getString(cursor.getColumnIndex(myDbHelper.CODE_PAYS));
        String  nom_pays =cursor.getString(cursor.getColumnIndex(myDbHelper.NOM_PAYS));
        buffer.append(id_pays+ "   " + code_pays + "   " + nom_pays + "\n");
    }
        return buffer.toString();
    }
 
    public String getDataRegion()
    {
        SQLiteDatabase db = myhelper.getWritableDatabase();
        String[] columns = {myDbHelper.ID_REGION,myDbHelper.CODE_REGION,myDbHelper.NOM_REGION,myDbHelper.FK_PAYS};
        Cursor cursor =db.query(myDbHelper.TABLE_REGION,columns,null,null,null,null,null);
        StringBuffer buffer= new StringBuffer();
        while (cursor.moveToNext())
        {
            int _id_reg =cursor.getInt(cursor.getColumnIndex(myDbHelper.ID_REGION));
            String code_reg =cursor.getString(cursor.getColumnIndex(myDbHelper.CODE_REGION));
            String  nom_reg =cursor.getString(cursor.getColumnIndex(myDbHelper.NOM_REGION));
            int fk_pays =cursor.getInt(cursor.getColumnIndex(myDbHelper.FK_PAYS));
            buffer.append(_id_reg+ "   " + code_reg + "   " + nom_reg + "  "+ fk_pays + "\n");
        }
        return buffer.toString();
    }
 
       public String getDataDepart()
    {
        SQLiteDatabase db = myhelper.getWritableDatabase();
        String[] columns = {myDbHelper.ID_DEPARTEMENT,myDbHelper.CODE_DEPARTEMENT,myDbHelper.NOM_DEPARTEMENT,myDbHelper.FK_REGION};
        Cursor cursor =db.query(myDbHelper.TABLE_DEPARTEMENT,columns,null,null,null,null,null);
        StringBuffer buffer= new StringBuffer();
        while (cursor.moveToNext())
        {
            int _id_dep =cursor.getInt(cursor.getColumnIndex(myDbHelper.ID_DEPARTEMENT));
            String code_dep =cursor.getString(cursor.getColumnIndex(myDbHelper.CODE_DEPARTEMENT));
            String  nom_dep =cursor.getString(cursor.getColumnIndex(myDbHelper.NOM_DEPARTEMENT));
            int fk_region =cursor.getInt(cursor.getColumnIndex(myDbHelper.FK_REGION));
            buffer.append(_id_dep+ "   " + code_dep + "   " + nom_dep + "  "+ fk_region + "\n");
        }
        return buffer.toString();
    }
 
    public String getDataSouspref()
    {
        SQLiteDatabase db = myhelper.getWritableDatabase();
        String[] columns = {myDbHelper.ID_SOUSPREF,myDbHelper.CODE_SOUSPREF,myDbHelper.NOM_SOUSPREF,myDbHelper.FK_DEPARTEMANT};
        Cursor cursor =db.query(myDbHelper.TABLE_SOUSPREF,columns,null,null,null,null,null);
        StringBuffer buffer= new StringBuffer();
        while (cursor.moveToNext())
        {
            int _id_sp =cursor.getInt(cursor.getColumnIndex(myDbHelper.ID_SOUSPREF));
            String code_sp =cursor.getString(cursor.getColumnIndex(myDbHelper.CODE_SOUSPREF));
            String  nom_sp =cursor.getString(cursor.getColumnIndex(myDbHelper.NOM_SOUSPREF));
            int fk_departemnt =cursor.getInt(cursor.getColumnIndex(myDbHelper.FK_DEPARTEMANT));
            buffer.append(_id_sp+ "   " + code_sp + "   " + nom_sp + "  "+ fk_departemnt + "\n");
        }
        return buffer.toString();
    }
 
 
 
    static class myDbHelper extends SQLiteOpenHelper{
        public static final String DATABASE_NAME = "lagdv_bd";    // Database Name
        private static final int DATABASE_Version = 16;    // Database Version
 
        // Pour la création des tables
        private static final String TABLE_PAYS = "pays_0"; // Table Name
        private static final String ID_PAYS="_id_pays";
        private static final String CODE_PAYS = "code_pays";
        private static final String NOM_PAYS= "nom_pays";
        private static final String CREATE_TABLE_PAYS = "CREATE TABLE "+TABLE_PAYS+
                " ("+ID_PAYS+" INTEGER PRIMARY KEY AUTOINCREMENT, "+CODE_PAYS+" VARCHAR(255) ,"+NOM_PAYS+" VARCHAR(255));";
 
        private static final String TABLE_REGION = "region_0"; // Table Name
        private static final String ID_REGION="_id_reg";
        private static final String CODE_REGION = "code_reg";
        private static final String NOM_REGION= "nom_reg";
        private static final String FK_PAYS= "fk_pays";
        private static final String CREATE_TABLE_REGION = "CREATE TABLE "+TABLE_REGION+
                " ("+ID_REGION+" INTEGER PRIMARY KEY AUTOINCREMENT, "+CODE_REGION+" VARCHAR(255), "+NOM_REGION+" VARCHAR(255), "+FK_PAYS+" INTEGER);";
 
        private static final String TABLE_DEPARTEMENT = "departement_0"; // Table Name
        private static final String ID_DEPARTEMENT="_id_dep";
        private static final String CODE_DEPARTEMENT = "code_dep";
        private static final String NOM_DEPARTEMENT= "nom_dep";
        private static final String FK_REGION= "fk_region";
        private static final String CREATE_TABLE_DEP = "CREATE TABLE "+TABLE_DEPARTEMENT+
                " ("+ID_DEPARTEMENT+" INTEGER PRIMARY KEY AUTOINCREMENT, "+CODE_DEPARTEMENT+" VARCHAR(255), "+NOM_DEPARTEMENT+" VARCHAR(255), "+FK_REGION+" INTEGER);";
 
        private static final String TABLE_SOUSPREF = "sous_prefecture_0"; // Table Name
        private static final String ID_SOUSPREF="_id_sp";
        private static final String CODE_SOUSPREF = "code_sp";
        private static final String NOM_SOUSPREF= "nom_sp";
        private static final String FK_DEPARTEMANT= "fk_departemnt";
        private static final String CREATE_TABLE_SOUSPREF = "CREATE TABLE "+TABLE_SOUSPREF+
                " ("+ID_SOUSPREF+" INTEGER PRIMARY KEY AUTOINCREMENT, "+CODE_SOUSPREF+" VARCHAR(255), "+NOM_SOUSPREF+" VARCHAR(255), "+FK_DEPARTEMANT+" INTEGER);";
 
  private Context context;
 
        public myDbHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_Version);
            this.context = context;
        }
        public void onCreate(SQLiteDatabase db) {
 
            try { //création des tables
                db.execSQL(CREATE_TABLE_REGION);
                db.execSQL(CREATE_TABLE_PAYS);
                db.execSQL(CREATE_TABLE_DEP);
                db.execSQL(CREATE_TABLE_SOUSPREF);
 
            } catch (Exception e) {
               Message.message(context,""+e);
            }
        }
 
 
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            try {
                Message.message(context,"OnUpgrade");
                db.execSQL(DROP_TABLE_REGION);
                db.execSQL(DROP_TABLE_PAYS);
                db.execSQL(DROP_TABLE_DEP);
                db.execSQL(DROP_TABLE_SOUSPREF);
                onCreate(db);
            }catch (Exception e) {
                Message.message(context,""+e);
            }
        }
    }
donc ces fonctions insert..... et getdata... sont appelées depuis une classe (activity) Form_save.java contenant les contrôles (EditText, Button, Spinner...) pour l'insertion et la visualisation des données par action sur les boutons.

la classe Form_save.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
 
 
//insertion des données
public void addpays(View view){
        String t1 = code_pays.getText().toString();
        String t2 = nom_pays.getText().toString();
        if(t1.isEmpty() || t2.isEmpty())
        {
            Message.message(getApplicationContext(),"veuillez renseigner tous les champs");
        }
        else
        {
            long id = helper.insertDatapays(t1,t2);           
            if(id<=0)
            {
                Message.message(getApplicationContext(),"Insertion échouée");
                code_pays.setText("");
                nom_pays.setText("");
            } else
            {
                Message.message(getApplicationContext(),"Insertion avec succées");
                code_pays.setText("");
                nom_pays.setText("");
            }
        }
    }
 public void viewdatapays(View view)
    {
        String data = helper.getDatapays();
        Message.message(this,data);
    }
...........................
J'ai dû supprimer plusieur la BD pensant que ça changera quelque chose sans aucun succès à part ce message d'erreur
Nom : erreur.JPG
Affichages : 106
Taille : 13,5 Ko


J'ai lu beaucoup de tuto jusqu’à là sans aucune solution. Par example:
http://riggaroo.co.za/android-sqlite...ade-correctly/
Pour être honnête, je ne connais pas exactement où se trouve le/les problèmes
Toute aide sera la bienvenue pour m'aider à avancer dans cet apprentissage de dev androïde.