Impossible d'insérer des données dans ma table

Résolu/Fermé
rapidegoyes Messages postés 70 Date d'inscription samedi 22 février 2020 Statut Membre Dernière intervention 1 septembre 2023 - 25 juil. 2021 à 22:00
rapidegoyes Messages postés 70 Date d'inscription samedi 22 février 2020 Statut Membre Dernière intervention 1 septembre 2023 - 27 juil. 2021 à 21:44
Bonjour,

Je code une appli avec BDD sqlite.

J'ai ajouté une colonne CONGELATEUR à ma table.
Depuis je ne peux plus insérer de données dans la BDD.
Pourtant je n'ai aucune erreur ni dans Build et ni dans Logcat.
Mon appli se lance mais plus moyen de rentrer des lignes.

Avant l'ajout de cette colonne CONGELATEUR tout était OK.

Ci-dessous mon extrait de code:

Fichier MainActivity.java
public class MainActivity extends AppCompatActivity {
SQLiteDataBaseHelper db; //déclaration db


//déclaration tableaux pour spinner et spinner2
String[] typeProduit = {"viande", "fromage", "fruit", "poisson", "patisserie", "legume", "divers"};

String[] endroitProduit = {"Gauche-bas", "Gauche-haut", "Milieu-bas", "Milieu-haut", "Droite-bas", "Droite-haut",
"Dessus", "Compartiment", "Panier gauche", "Panier droite", "Tiroir1", "Tiroir2", "Tiroir3", "Tiroir4", "Tiroir5", "Tiroir6",
"Tiroir7", "Bac gauche", "Bac droite"};

String[] années = {"Année","2019", "2020", "2021", "2022", "2023", "2024", "2025", "2026"};

String[] mois = {"Mois","-01-", "-02-", "-03-", "-04-", "-05-", "-06-", "-07-", "-08-", "-09-", "-10-", "-11-", "-12-"};

String[] jours = {"Jour","01","02","03","04","05","06","07","08","09","10","11","12","13","14",
"15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31"};

String [] choix_congelateur = {"Cave1", "Cave2", "Cuisine1", "Cuisine2", "Garage1", "Garage2",
"Debarras1", "Debarras2"};


//déclaration des objets widget
EditText nomInput;
EditText nombreInput;
Spinner spinerinputType;
Spinner spinnerAnnees;
Spinner spinnerMonate;
Spinner spinnerTag;
Spinner spinnerendroit;
Button buttonAddData;
Button supprimeData;
Spinner Congel_Choix;

@SuppressLint("RtlHardcoded")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

db = new SQLiteDataBaseHelper(this);

//*************mise en page du toast********************
Context context = getApplicationContext();
CharSequence text = " ATTENTION, remplir tout avant de cliquer sur enregistrer!";
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, text, duration);
toast.setGravity(Gravity.TOP|Gravity.LEFT, 40, 200);
toast.show();

// récupération des différents widgets
spinerinputType = findViewById(R.id.spinner2);
nomInput = findViewById(R.id.nom_editText);
nombreInput = findViewById(R.id.nombre_edittext);
spinnerendroit = findViewById(R.id.spinner);
buttonAddData = findViewById(R.id.ajouter_button);
spinnerAnnees = findViewById(R.id.spinnerDate);
spinnerMonate = findViewById(R.id.spinnerMois);
spinnerTag = findViewById(R.id.spinnerJours);
supprimeData = findViewById(R.id.viderBDD); //récupération du bouton supprimer données
Congel_Choix = findViewById(R.id.spinner_Congelo); //récup du spinner choix de congélateur


AddData(); //appel fonction AddData

//créer le ArrayAdapter instance concernant le type de produit
final ArrayAdapter<String> adapter2 = new ArrayAdapter<String>(this, R.layout.spinner_item, typeProduit);
adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
//Setting the ArrayAdapter data on the Spinner
spinerinputType.setAdapter(adapter2);

//créer le ArrayAdapter instance concernant l'endroit de stockage du produit
ArrayAdapter<String> adapter = new ArrayAdapter<>(this, R.layout.spinner_item, endroitProduit);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
//Setting the ArrayAdapter data on the Spinner
spinnerendroit.setAdapter(adapter);

//créer le ArrayAdapter instance concernant les années
final ArrayAdapter<String> adapter3 = new ArrayAdapter<>(this, R.layout.spinner_item, années);
adapter3.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
//Setting the ArrayAdapter data on the Spinner
spinnerAnnees.setAdapter(adapter3);

//créer le ArrayAdapter instance concernant les mois
final ArrayAdapter<String> adapter4 = new ArrayAdapter<>(this, R.layout.spinner_item, mois);
adapter4.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
//Setting the ArrayAdapter data on the Spinner
spinnerMonate.setAdapter(adapter4);

//créer le ArrayAdapter instance concernant les jours
final ArrayAdapter<String> adapter5 = new ArrayAdapter<>(this, R.layout.spinner_item, jours);
adapter5.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
//Setting the ArrayAdapter data on the Spinner
spinnerTag.setAdapter(adapter5);

//créer le ArrayAdapter instance concernant les jours
final ArrayAdapter<String> adapter6 = new ArrayAdapter<>(this, R.layout.spinner_item, choix_congelateur);
adapter6.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
//Setting the ArrayAdapter data on the Spinner
Congel_Choix.setAdapter(adapter6);


//écouteur sur le bouton supprimer les données
supprimeData.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
showMessage(); //appel de la fonction showMessage
}
});


} //fin de la méthode onCreate

//fonction pour le message d'alerte pour confirmation supprimer les données
private void showMessage(){
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("ATTENTION ! Suppression de toutes les données de la BDD");
builder.setMessage("Voulez vous vraiment supprimer toutes les données ?:");
builder.setPositiveButton("OK", null);
builder.setNegativeButton("Annuler", null);

builder.setPositiveButton("OK", new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int which) {
db.deleteAll(); //appel de la fonction deleteAll qui se trouve dans SQLiteDatabaseHelper
Toast.makeText(getApplicationContext(), "OK les données sont supprimées!", Toast.LENGTH_LONG).show();
}
});
builder.create().show();
}

//fonction qui insère les données
public void AddData(){
buttonAddData.setOnClickListener(
new View.OnClickListener(){
public void onClick(View view) { // insertion de nouveaux enegistrements par click sur le bouton

//appel de la fonction insertData
boolean isInserted = db.insertData(
spinerinputType.getSelectedItem().toString(),
nomInput.getText().toString(),
spinnerAnnees.getSelectedItem().toString() +spinnerMonate.getSelectedItem().toString()
+ spinnerTag.getSelectedItem().toString(),
nombreInput.getText().toString(),
spinnerendroit.getSelectedItem().toString(),
Congel_Choix.getSelectedItem().toString());

// déclenchement du toast pour voir s'il y a insertion
if (isInserted) {
Toast.makeText(MainActivity.this, "Les données sont insérées avec succès", Toast.LENGTH_SHORT).show();
}
else
Toast.makeText(MainActivity.this, "Les données ne sont pas insérées", Toast.LENGTH_SHORT).show();

}

}
);
}

}



Extrait de code fichier SqliteDataBaseHelper

//méthode pour création de la BDD et Table
public class SQLiteDataBaseHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "Book.db";
public static final String TABLE_NAME = "book_table";
public static String COL_1 = "ID";
public static final String COL_2 = "TYPE";
public static final String COL_3 = "NOM";
public static final String COL_4 = "DATE";
public static final String COL_5 = "NOMBRE";
public static final String COL_6 = "ENDROIT";
public static final String COL_7 = "CONGELATEUR";

//constructeur rempli
public SQLiteDataBaseHelper(Context context) {
super(context, DATABASE_NAME, null, 1);
}

//création de la table
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE table " + TABLE_NAME + "(ID INTEGER PRIMARY KEY AUTOINCREMENT," +
" TYPE TEXT, NOM TEXT , DATE TEXT, NOMBRE TEXT, ENDROIT TEXT, CONGELATEUR TEXT");
}

//supprime et recré la table pour la mettre à jour
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
onCreate(db);
}

// méthode qui insère les données
public boolean insertData(String type, String nom, String date, String nombre, String endroit, String congelateur) {
SQLiteDatabase db = this.getWritableDatabase(); //ouvre la table en écriture

ContentValues contentValues = new ContentValues();
contentValues.put(COL_2, type);
contentValues.put(COL_3, nom);
contentValues.put(COL_4, date);
contentValues.put(COL_5, nombre);
contentValues.put(COL_6, endroit);
contentValues.put(COL_7, congelateur);
long result = db.insert(TABLE_NAME, null, contentValues);
return result != -1;
}

//méthode appelée pour faire fonctionner le simpleCursordapter
public Cursor crerColonne(){
SQLiteDatabase db = this.getWritableDatabase();
return db.rawQuery("SELECT ID as _id, TYPE, NOM, DATE, NOMBRE, ENDROIT, CONGELATEUR, * FROM book_table ", null);
}

public void supprime_ligne(long id) {
SQLiteDatabase db = this.getWritableDatabase();
db.delete(TABLE_NAME, "id = ? ", new String[]{Integer.toString((int) id)});
}

public Cursor selection_Viande(){
SQLiteDatabase db = this.getWritableDatabase();
return db.rawQuery( "SELECT ID as _id, * FROM book_table WHERE TYPE = 'viande' ORDER BY TYPE, DATE ASC", null);
}


Vraiment je ne comprends pas aucune erreur et pourtant impossible d'entrer de données !

Un grand merci à qui pourrait m'épauler.

A+++ cordialement
rapidegoyes






Configuration: Windows / Firefox 90.0
A voir également:

2 réponses

BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 3 895
26 juil. 2021 à 09:56
Hello,

Est-ce que ton code fonctionne si tu désinstalles et tu ré-installes l'app ?
Si tu testes avec une app déjà installée, il te faut implémenter la callback
SQLiteOpenHelper.onUpgrade()
pour pouvoir ajouter une colonne à ta table déjà créée
1
rapidegoyes Messages postés 70 Date d'inscription samedi 22 février 2020 Statut Membre Dernière intervention 1 septembre 2023 7
Modifié le 27 juil. 2021 à 21:45
Bonsoir BunoCS,
J'ai suivi tes conseils, après réinstallation plus rien ! je n'arrivais plus à lancer l'appli.
Le fichier AndroidManifest était rempli d'erreurs.
J'ai tout viré et je reprends tout à tête reposée depuis le niveau qui fonctionne.
J'ai sans doute fait une grosse connerie.

En tout cas un grand merci pour ton aide, à plus pour me secourir

cordialement
rapidegoyes
0