IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

SUM base de données


Sujet :

Android

  1. #1
    Membre régulier
    Homme Profil pro
    ETUDIANT
    Inscrit en
    Novembre 2012
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : ETUDIANT

    Informations forums :
    Inscription : Novembre 2012
    Messages : 111
    Points : 70
    Points
    70
    Par défaut SUM base de données
    bonjour,

    Je voulais obtenir la somme where KEY_CONTENT20=prixallo:

    basedonne.java:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public Cursor total_allo(String prixallo) 
    {
    	return sqLiteDatabase.query(FOUR_CLIENT, new String[] {"SUM(" + KEY_CONTENT22 +")"}, 
    			KEY_CONTENT20,  new String[] {prixallo}, null, null, null);
    }
    main.java:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    double sumA= Math.round(my_operations_mois.total_allo(datefinal)*100.0)/100.0;
    mais erreur avant exécuter : the operator * is undefined for the argument type(s) Cursor, double

    comment corriger l'erreur

    Merci d'avance

  2. #2
    Expert confirmé
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Points : 4 166
    Points
    4 166
    Par défaut
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Cursor c = my_operations_mois.total_allo(datefinal);
    cursor.moveToFirst();
    double sumA= Math.round(c.getDouble(0)*100.0)/100.0;
    cursor.close();
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  3. #3
    En attente de confirmation mail
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2010
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2010
    Messages : 46
    Points : 50
    Points
    50
    Par défaut
    Personnellement, je te conseillerai de faire en sorte que ta méthode renvoi directement ton résultat déjà sous forme de double (étant donné que le but de la méthode c'est juste de renvoyer un montant, donc aucun besoin de renvoyer un curseur).

    En partant du code de Hephaistos007 et en sécurisant un peu plus le code je te propose cette méthode :

    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
     
        public double total_allo(String prixallo)
        {
            double result = 0 ;
            Cursor cur = null ;
     
            try
            {
                cur  = sqLiteDatabase.query(FOUR_CLIENT, new String[]{"SUM(" + KEY_CONTENT22 + ")"}, KEY_CONTENT20, new String[]{prixallo}, null, null, null);
     
                if  (( cur != null) && ( cur.getCount() > 0) )
                {
                    cur.moveToFirst();
                    result  = cur.getDouble(0);
                } 
            } 
            finally {
                if (mCursor != null) {
                    mCursor.close();
                }
            }
     
            return result ;
        }
    Et l'appelant n'a juste qu'a faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    double sumA= Math.round(my_operations_mois.total_allo(datefinal)*100.0)/100.0;

  4. #4
    Membre régulier
    Homme Profil pro
    ETUDIANT
    Inscrit en
    Novembre 2012
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : ETUDIANT

    Informations forums :
    Inscription : Novembre 2012
    Messages : 111
    Points : 70
    Points
    70
    Par défaut sum
    bonjour,

    j'ai trouvé la solution comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public double Mois_total_client(String mois)
    {
     
     
    Cursor CCursor = sqLiteDatabase.rawQuery("SELECT  SUM(solde_client) FROM four_cl WHERE mois_annee = ?", new String[] {mois});
    if(CCursor.moveToFirst()) {return CCursor.getDouble(0);}
    return CCursor.getDouble(0);
    }
    encore une fois merci Hephaistos007 etstelincat pour l'idée

  5. #5
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Attention...
    le cursor n'est pas fermé...
    les noms de variables / fonction en java commencent par une minuscules (camelCase) et le "_" est "interdit"

    et le "if" ne sert à rien:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if(CCursor.moveToFirst()) {return CCursor.getDouble(0);}
    return CCursor.getDouble(0);
    Si la fonction ne retourne pas de curseur, celui-ci doit être fermé par la fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public double getTotalMoisClient(String mois)
    {
        double ret = 0;
        Cursor curs = null;
        try {
           curs = sqLiteDatabase.rawQuery("SELECT  SUM(solde_client) FROM four_cl WHERE mois_annee = ?", new String[] {mois});
           if (! curs.moveToFirst()) throw new SQLiteException("No data available !");
           ret = curs.getDouble(0);
         } finally {
           if (curs != null) curs.close();
         }
         return ret;
    }
    Ensuite pour chipoter, je suis toujours étonné de voir un "mois" passé sous forme de "string".
    Les mois étant "fixes" (enfin, dans le calendrier grégorien tout du moins), un "enum" permettrait d'éviter les erreurs de programmation (vive le typage fort ! ).
    Et si "mois" est en fait un formatage "complexe" (ou non) d'un mois et d'une année (comme la requête le laisse penser), alors une "classe" stockant le mois et l'année, et produisant le formatage (fonction toString() ) voulu sera certainement plus adaptée.
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème Base de données et CRecordSet
    Par LE CHAKAL dans le forum MFC
    Réponses: 3
    Dernier message: 20/08/2002, 11h59
  2. connexion base de donné
    Par saidi dans le forum MFC
    Réponses: 3
    Dernier message: 07/08/2002, 22h22
  3. [Concept] Stabilité d'une base de donnée
    Par lassmust dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 03/07/2002, 16h16
  4. Bases de données
    Par dev dans le forum C++Builder
    Réponses: 4
    Dernier message: 01/07/2002, 22h55
  5. associer une base de données(access) a un dbgrid
    Par ange1708 dans le forum MFC
    Réponses: 3
    Dernier message: 11/06/2002, 12h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo