2016-12-09 2 views
1

Je cherche sur le net pour trouver une solution à ce besoin: J'ai besoin de rassembler la somme du groupe de données 'amout' par mois.SQLite sélectionnez la somme avec le groupe mensuel par

Ce que je trouve cette demande est:

Cursor cursor = mDb.rawQuery("SELECT strftime('%m', date), SUM(amount) FROM " + DATABASE_TABLE + " GROUP BY strftime('%m', date)", null); 

mais je tire mes cheveux depuis que je ne suis pas en mesure de recueillir un mois de cette fonction strftime('%m', date);

J'ai trouvé sur le net que cela pourrait provenir d'un format de date dans ma base de données qui ne sera pas compris par la fonction.

La date stockée dans mon actuel DB est: "Jeu 1 décembre 00:00:00 GMT + 00: 00 2016"

-je utiliser ce curseur pour vérifier la valeur retournée:

Cursor cursor = mDb.rawQuery("SELECT distinct date, strftime('%m', date) FROM " + DATABASE_TABLE, null); 

dans le curseur (vérifier que la première vérification du curseur) J'ai:

  • cursor.getString (0) = Jeu 1 décembre 00:00:00 GMT + 00: 00 2016
  • cursor.getString (1) = null

Donc, je rassemble correctement la date, c'est la conversion qui ne fonctionne pas. Comme proposé et comme expliqué, j'ai pensé que le format pourrait être mal compris par la fonction (et c'est évidemment le cas).

Voici comment ajouter la date à ma base de données: J'utilise ceci: dateFormat = new SimpleDateFormat("dd/MM/yyyy");

puis cette ligne pour ajouter la date à mon objet de l'argent avant de l'enregistrer dans la base de données: dateFormat.parse("01/12/2016")

Can vous m'avez aidé? Merci.

+0

'La date stockée dans mon actuel DB est: "Jeu 1 décembre 00:00:00 GMT + 00: 00 2016"' Ensuite, nous avons la cause de votre bug. Vous devez stocker votre date en tant que chaîne SQLite ** valide **. –

+0

Ok, c'est ce que je pensais, mais j'ai essayé plusieurs façons d'analyser, sans savoir comment ajouter une date valide, et qu'est-ce qu'une date valide, SQLite parle? Merci. – Alexandre

+1

c.-à-d.: «2016-12-09». Vous pouvez rechercher 'sqlite timestring' et accéder aux documents officiels. –

Répondre

1

Merci à Rotwang qui me conduisent à la question du format, mon problème a été localisé dans mon article Database créateur

Quand je créais mon objet, je mettais juste la date telle qu'elle est stockée dans ma classe (java.util .Date date) sans le formater. Donc, la date a toujours été stockée avec le mauvais format. J'ai dû le formater pendant la phase de création. Ci-dessous le code pour créer mon objet et résoudre mon problème.

dateFormat = new SimpleDateFormat("yyy-MM-dd"); Merci encore Rotwang

Et:

public void createMoney(Money money) { 
     ContentValues values = new ContentValues(); 

     values.put(TITLE, money.get_title()); 
     values.put(AMOUNT, money.get_amount()); 
     values.put(DETAILS, money.get_details()); 
     values.put(DATE, dateFormat.format(money.get_date())); 
     values.put(TYPE_FK_ID, money.get_typeFkId()); 
     values.put(CONTACT_FK_ID, money.get_contactFkId()); 
     values.put(REMINDER_FK_ID, money.get_reminderFkId()); 

     mDb.insert(DATABASE_TABLE, null, values); 
    }