Difficulté avec requête SQLite

Résolu
rapidegoyes Messages postés 107 Date d'inscription samedi 22 février 2020 Statut Membre Dernière intervention 12 février 2025 - Modifié le 26 janv. 2025 à 21:56
rapidegoyes Messages postés 107 Date d'inscription samedi 22 février 2020 Statut Membre Dernière intervention 12 février 2025 - 27 janv. 2025 à 22:23

Bonjour,

J'ai l'intention de calculer la somme de ma colonne syst dans ma table releves.

extrait création de la table:

public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE table" + TABLE_NAME + "(ID INTEGER PRIMARY KEY AUTOINCREMENT," +
                        "JOUR TEXT, PERIODE TEXT, SYST INTEGER, DIAS INTEGER, PULS INTEGER)");
    }//fin méthode onCreate

Dès exécution de ma requête mon appli plante.

J'ai beau chercher je ne trouve pas de piste.

voici mon extrait de requête:

 public void calculPourSyst() {
        SQLiteDatabase db = this.getWritableDatabase();
        db.execSQL("SELECT SUM(syst), * FROM releves");//somme de syst
    }// fin de calculPourSyst

Voici un extrait du logcat:

Queries can be performed using SQLiteDatabase query or rawQuery methods only

Si j'essaye avec rawQuery c'est pareil, il plante

Merci de m'épauler

Cordialement

rapidego&
Windows / Firefox 134.0

A voir également:

4 réponses

jordane45 Messages postés 38418 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 14 février 2025 4 734
Modifié le 26 janv. 2025 à 23:07

Bonjour,

Tu as plusieurs soucis dans ton code.

Déjà,  avec un SUM .. tu ne peux pas en plus mettre le *

Et en effet, il ne faut pas utiliser execSQL qui sert uniquement pour faire des update / delete / insert
mais rawQuery quand tu fais du select.
Et enfin, ta fonction n'utilise pas le résultat de la requête..

Essaye ça

public int calculPourSyst() {
    SQLiteDatabase db = this.getReadableDatabase();
    int sumSyst = 0;

    // Requête SQL corrigée
    String query = "SELECT SUM(syst) AS total_syst FROM releves";
    Cursor cursor = db.rawQuery(query, null);

    // Récupération du résultat
    if (cursor.moveToFirst()) {
        sumSyst = cursor.getInt(cursor.getColumnIndexOrThrow("total_syst"));
    }

    // Fermeture du curseur 
    cursor.close();


    return sumSyst;
}

1
rapidegoyes Messages postés 107 Date d'inscription samedi 22 février 2020 Statut Membre Dernière intervention 12 février 2025 7
27 janv. 2025 à 11:28

Bonjour jordane45,

Merci pour ton aide, je vais essayer de rectifier ce soir.

Très cordialement

rapidego&

0
rapidegoyes Messages postés 107 Date d'inscription samedi 22 février 2020 Statut Membre Dernière intervention 12 février 2025 7
Modifié le 27 janv. 2025 à 21:47

Bonsoir à tous,

Je viens à l'instant d' essayer super ça fonctionne.

J'ai codé l' exemple de jordane45 dans mon fichier SQLDataBaseHelper dans le quel je place toutes mes requêtes.

Ensuite je lance ta requête par action sur un bouton dans mon fichier AfficheBDD.

J'ai relu mes notes sur MySQL effectivement il ne faut pas coder avec étoile * car pour ce dernier, on ne s'en sert que pour sélectionner toutes les colonnes d'une table.

Au sujet du rajout de AS total_syst quel est vraiment son rôle d'après mes recherches il s'agit de création d'une colonne à cet effet je n'osais pas l'utiliser.

C'est un peu flou pour moi, je suis preneur de renseignements à ce sujet.

Merci à tous

Très cordialement

A+++

rapidegoyes

0
jordane45 Messages postés 38418 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 14 février 2025 4 734
27 janv. 2025 à 22:06

bonjour 

renseigne-toi sur ce qu'est un alias dans une requête SQL.

0
rapidegoyes Messages postés 107 Date d'inscription samedi 22 février 2020 Statut Membre Dernière intervention 12 février 2025 7
27 janv. 2025 à 22:23

Bonsoir,

C'est super je viens d'essayer la fonction en utilisant COUNT(), AVG(),pour la moyenne,

MIN() renvoie la valeur la plus basse, MAX() idem mais valeur la plus haute.

Tout fonctionne il me fallait les 3.

Merci pour tout je vais enfin pouvoir continuer mon code, je butais vraiment la dessus

A+++ très cordialement

rapidegoyes

0