Addition sql sous android pour une gestion de stock
kyller_4432 Messages postés 49 Statut Membre -
Bonjour,
Je suis bloquer sur le faite de rajouter une quantite a une quantite stock dans ma base de donnée sous android.
Le but est que je puisse additionner 2 valeur dont celle qui est dans la bdd de base + une autre que je rentre depuis l'application
public class BdAdapter {
static final int VERSION_BDD = 13;
private static final String NOM_BDD = "gsb.db";
private static final String TABLE_ECHANT = "echantillons";
static final String COL_ID = "_id";
static final int NUM_COL_ID = 0;
static final String COL_CODE = "CODE";
static final int NUM_COL_CODE = 1;
static final String COL_LIB = "LIB";
static final int NUM_COL_LIB = 2;
static final String COL_STOCK = "STOCK";
static final int NUM_COL_STOCK = 3;
private CreateBdEchantillon bdArticles;
private Context context;
private SQLiteDatabase db;
public BdAdapter(Context context){
this.context = context;
bdArticles = new CreateBdEchantillon (context, NOM_BDD, null, CreateBdEchantillon.VERSION_BDD);
}
//si la base n’existe pas, l’objet SQLiteOpenHelper exécute la méthode onCreate
// si la version de la base a changé, la méthode onUpgrade sera lancée, dans les
// 2 cas l’appel à getWritableDatabase ou getReadableDatabase renverra la base
// de données en cache, nouvellement ouverte, nouvellement créée ou mise à jour
public BdAdapter open (){
db = bdArticles.getWritableDatabase();
return this;
}
public BdAdapter close (){
db.close();
return this;
}
public long insererEchantillon(echantillon unEchant){
//Création d'un ContentValues (fonctionne comme une HashMap)
ContentValues values = new ContentValues();
//on lui ajoute une valeur associé à une clé
// (qui est le nom de la colonne où on veut mettre la valeur)
values.put(COL_CODE, unEchant.getCode());
values.put(COL_LIB, unEchant.getLibelle());
values.put(COL_STOCK, unEchant.getQuantiteStock());
//on insère l'objet dans la BDD via le ContentValues
return db.insert(TABLE_ECHANT, null, values);
}
public long insererEchantillon2(echantillon unEchant2){
//Création d'un ContentValues (fonctionne comme une HashMap)
ContentValues values = new ContentValues();
//on lui ajoute une valeur associé à une clé
// (qui est le nom de la colonne où on veut mettre la valeur)
values.put(COL_CODE, unEchant2.getCode());
values.put(COL_LIB, unEchant2.getLibelle());
values.put(COL_STOCK, unEchant2.getQuantiteStock());
//on insère l'objet dans la BDD via le ContentValues
return db.insert(TABLE_ECHANT, null, values);
}
public long insererEchantillon3(echantillon unEchant3){
//Création d'un ContentValues (fonctionne comme une HashMap)
ContentValues values = new ContentValues();
//on lui ajoute une valeur associé à une clé
// (qui est le nom de la colonne où on veut mettre la valeur)
values.put(COL_CODE, unEchant3.getCode());
values.put(COL_LIB, unEchant3.getLibelle());
values.put(COL_STOCK, unEchant3.getQuantiteStock());
//on insère l'objet dans la BDD via le ContentValues
return db.insert(TABLE_ECHANT, null, values);
}
public long insererEchantillon4(echantillon unEchant4){
//Création d'un ContentValues (fonctionne comme une HashMap)
ContentValues values = new ContentValues();
//on lui ajoute une valeur associé à une clé
// (qui est le nom de la colonne où on veut mettre la valeur)
values.put(COL_CODE, unEchant4.getCode());
values.put(COL_LIB, unEchant4.getLibelle());
values.put(COL_STOCK, unEchant4.getQuantiteStock());
//on insère l'objet dans la BDD via le ContentValues
return db.insert(TABLE_ECHANT, null, values);
}
private echantillon cursorToEchant(Cursor c){
//Cette méthode permet de convertir un cursor en un echantillon
// si aucun élément n'a été retourné dans la requête, on renvoie null
echantillon unEchant=null ;
if (c.getCount() != 0){
c.moveToFirst();
//on se place sur le premier élément
unEchant = new echantillon();
//On créé un echantillon //on lui affecte toutes les infos grâce aux infos contenues dans le Cursor
unEchant.setCode(c.getString(NUM_COL_CODE));
unEchant.setLibelle(c.getString(NUM_COL_LIB));
unEchant.setQuantiteStock(c.getString(NUM_COL_STOCK));
}
c.close(); //On ferme le cursor
return unEchant; //On retourne l'echantillon
}
public echantillon getEchantillonWithLib(String unCode){
//Récupère dans un Cursor les valeurs correspondant à un echantillon
// grâce à sa designation)
Cursor c = db.query(TABLE_ECHANT, new String[] {COL_ID,COL_CODE, COL_LIB,
COL_STOCK}, COL_CODE + " LIKE \"" + unCode +"\"", null, null, null, null);
return cursorToEchant(c);
}
public int updateEchantillon(String unCode, String uneQuantite){ //addition
//La mise à jour d'un echantillon dans la BDD fonctionne plus ou moins
// comme une insertion, il faut simple préciser quel echantillon
// on doit mettre à jour grâce à son code
ContentValues values = new ContentValues();
values.put(COL_CODE, unCode);
values.put(COL_STOCK, uneQuantite);
//recupérer la quantité + une nouvelle quantité
return db.update(TABLE_ECHANT, values ,COL_CODE + " = \"" +unCode+"\"", null);
}
3 réponses
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
bonjour,
as-tu une question?
ta ligne 118 ne fonctionne pas?
-
J'arrive pas a trouver comment faire pour mettre a jour mon stock, j'ai regardé des tuto ou autre sur internet mais rien qui fonctionne comme voulu. Ducoup je repars de 0 pour mettre à jour mon stock.
-
OK, d'accord, mais qu'est-ce qui ne fonctionne pas ? La lecture de la base ? L'écriture ?
Voici le guide développeur pour SQLite: https://developer.android.com/training/data-storage/sqlite?hl=fr#java
D'ailleurs, tu as vraiment besoin de passer par SQLiteDatabase directement ? Aujourd'hui, les bonnes pratiques conseillent très fortement:
- d'utiliser Kotlin plutôt que Java
- d'utiliser Room pour la gestion de la base de données : https://developer.android.com/training/data-storage/room?hl=fr
-
-
package com.example.gsb; import static com.example.gsb.BdAdapter.COL_STOCK; import android.content.ContentValues; import android.content.Intent; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; public class majEchantillon extends AppCompatActivity { private EditText textViewCodeM; private EditText textViewQte; private Button buttonSupprimer; private Button buttonAjouterM; private Button buttonQuitterM; private TextView textViewAjout; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.majechantillon); BdAdapter bdAdapter = new BdAdapter(this); textViewCodeM = findViewById(R.id.textViewCodeM); textViewQte = findViewById(R.id.textViewQte); this.buttonSupprimer = findViewById(R.id.buttonSupprimer); this.buttonAjouterM = findViewById(R.id.buttonAjouterM); this.buttonQuitterM = findViewById(R.id.buttonQuitterM); buttonAjouterM.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String code = textViewCodeM.getText().toString(); String quantite = textViewQte.getText().toString(); //Echantillon echantillonAjout = new Echantillon(code, quantiteStock); bdAdapter.open(); bdAdapter.updateEchantillon(code, quantite); bdAdapter.close(); Intent AjoutMaj = new Intent(majEchantillon.this, MainActivity.class); startActivity(AjoutMaj); } }); buttonSupprimer.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String code = textViewCodeM.getText().toString(); String quantite = textViewQte.getText().toString(); bdAdapter.open(); bdAdapter.updateEchantillonWithCode(code,quantite); bdAdapter.close(); Intent supprimerMaj = new Intent(majEchantillon.this, MainActivity.class); startActivity(supprimerMaj); } }); buttonQuitterM.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent quitterMAJ = new Intent(majEchantillon.this, MainActivity.class); startActivity(quitterMAJ); } }); } public void MAJechantillon(String code, String quantite){ SQLiteDatabase db = new CreateBdEchantillon(this, "echantillons.db", null, CreateBdEchantillon.VERSION_BDD).getWritableDatabase(); // Créer un objet ContentValues avec les nouvelles valeurs ContentValues values = new ContentValues(); values.put(CreateBdEchantillon.COL_STOCK, quantite); // Mettre à jour l'échantillon dans la base de données String selection = COL_STOCK + " = ?"; String[] selectionArgs = { Integer.toString(Integer.parseInt(quantite)) }; int numRowsAffected = db.update(CreateBdEchantillon.TABLE_ECHANT, values, CreateBdEchantillon.COL_CODE + " + ", new String[]{code}); // Vérifier si la mise à jour a réussi if (numRowsAffected > 0) { Toast.makeText(this, "L'échantillon a été modifié", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(this, "La modification a échoué", Toast.LENGTH_SHORT).show(); } // Fermer la base de données db.close(); } } // a faire maj ajout la quantite actuelle + la nouvelle quantité // a faire soustraction de la quantite actuelle - la quantite enleverj'ai aussi fait sa mais impossible de trouver une solution pour mettre a jour ma base en faisant un ajout de stock