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 :

Date insérer en long et requête SQL


Sujet :

Android

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2013
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 23
    Points : 7
    Points
    7
    Par défaut Date insérer en long et requête SQL
    Bonjour tous le monde,

    J'ai un problème avec mes requêtes sql.
    J'ai une table ou des dates sont sauvegardées en long.
    ( date = Calendar.getInstance().getTimeInMillis(); )

    maintenant j'aimerai faire une requête pour récupérer tous les éléments de la base enregistrés aujourd'hui...
    Pour compliquer l'histoire je voudrais qu'aujourd'hui correspondent à "d'aujourd'hui midi à demain midi"
    Il faut donc que je fasse une méthode qui me renvois en long la date et l'heure d'aujourd'hui midi et demain midi.
    La je ne sais pas comment faire.

    Ensuite je voudrais utiliser ces 2 long dans la requête avec Between.
    Mais la aussi je sèche totalement..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Cursor c = bdd.query(
    TABLE_VERRE,
    new String[] {COL_ID_V, COL_DATE, COL_TYPE, COL_POINTS},
    COL_DATE +  .............     c'est la ou je sèche completement


    Quelqu'un a t'il une idée?

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Défini La date du jour puis ajoute lui une journée et tu aura ta limite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Calendar cal = Calendar.getInstance();
    cal.set(Calendar.HOUR,12);
    cal.set(Calendar.MINUTE,0);
    cal.set(Calendar.SECOND,0);
    cal.set(Calendar.MILLISECOND,0);
     
    Long today = cal.getTime();
     
    cal.add(Calendar.DAY_OF_YEAR, 1);
     
    Long tomorrow = cal.getTime();
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Futur Membre du Club
    Inscrit en
    Avril 2013
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 23
    Points : 7
    Points
    7
    Par défaut
    Bonjour Grunk,
    merci c'est pas mal du tout ça pour commencer!
    (oui je suis un peu flemmard aujourd'hui...)

    pour la requête j'avais essayé un truc comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    COL_DATE + " BETWEEN \"" + ici un long +" AND \""+ un autre long +"\"",
    Mais il me disait syntax error.
    Je crois qu'il faut l’écrire autrement.
    Tu as une idée?

  4. #4
    Futur Membre du Club
    Inscrit en
    Avril 2013
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 23
    Points : 7
    Points
    7
    Par défaut
    Update...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Calendar cal = Calendar.getInstance();
    			cal.set(Calendar.HOUR,12);
    			cal.set(Calendar.MINUTE,0);
    			cal.set(Calendar.SECOND,0);
    			cal.set(Calendar.MILLISECOND,0);
     
    			long today = cal.getTimeInMillis() / 1000;
     
    			cal.add(Calendar.DAY_OF_YEAR, 1);
     
    			long tomorrow = cal.getTimeInMillis() / 1000;
    ça c'est bon

    pour la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    COL_DATE + " BETWEEN \"" + debut +" AND " + fin +"\"",
    je dois mal écrire la requête

    08-08 17:16:55.539: E/AndroidRuntime(6825): Caused by: android.database.sqlite.SQLiteException: near ""1375999200 AND 1376085600"": syntax error: , while compiling: SELECT _id, date, type, points FROM table_verre WHERE date BETWEEN "1375999200 AND 1376085600"

    il faut des doubles quote ou des simple quote?
    faut il séparer le AND?

    je verrai ça demain

    Mais merci si tu réponds d'ici là Grunk



    Bonne soiré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
    Salut

    Je vois pas l'interêt du /1000 si tu stockes des millis, il faut conserver des millis....

    Pour la requête (en évitant au maximum les constructions "manuelles") à priori c'est simplement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    private static final String SQL_FILTER_DATES = COL_DATE + ">? AND " + COL_DATE+"<?";
     
    ....
     
    long today = ...;
    long tomorrow = ...;
     
    database.query(.... SQL_FILTER_DATES, new String[] { Long.toString(today), Long.toString(tomorrow) } );
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  6. #6
    Futur Membre du Club
    Inscrit en
    Avril 2013
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 23
    Points : 7
    Points
    7
    Par défaut
    Bonjour,

    Je me permets de Up ce sujet, car cela ne fonctionne toujours pas...

    Voici ma méthode qui me renvoie mes dates en long :
    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
     
    public long[] dateDuJour(){
    			Calendar cal = Calendar.getInstance();
    			cal.set(Calendar.HOUR,12);
    			cal.set(Calendar.MINUTE,0);
    			cal.set(Calendar.SECOND,0);
    			cal.set(Calendar.MILLISECOND,0);
     
    			long today = cal.getTimeInMillis();
     
    			cal.add(Calendar.DAY_OF_YEAR, 1);
     
    			long tomorrow = cal.getTimeInMillis();
     
    			long [] tab = new long[2];
    			tab[0] = today;
    			tab[1] = tomorrow;
    			return tab;
    		}
    et les méthodes qui font la requete :
    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
     
    public Verre getVerreWithDate(long [] d){
    		long debut = d[0];
    		long fin = d[1];
    		Cursor c =bdd.query(false, SQL_FILTER_DATES, new String[] { Long.toString(debut), Long.toString(fin) }, null, null, null, null, null, null );
    		return cursorToVerre(c);
    	}
     
    		private Verre cursorToVerre(Cursor c){
     
    			if (c.getCount() == 0)
    				return null;
     
    			c.moveToFirst();
    			Verre v = new Verre();
    			v.setId(c.getInt(NUM_COL_ID_V));
    			v.setDate(c.getLong(NUM_COL_DATE));
    			v.setType(c.getString(NUM_COL_TYPE));
    			v.setPoints(c.getInt(NUM_COL_POINTS));
    			c.close();
    			return v;
    		}
    et voici le message d'erreur :

    08-19 15:18:54.437: E/AndroidRuntime(16621): Caused by: android.database.sqlite.SQLiteException: near ">": syntax error: , while compiling: SELECT 1376949600000, 1377036000000 FROM date >? AND date <?


    Je ne suis pas très calé en requete SQL si quelqu'un peu m'aider svp

  7. #7
    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
    il manque le nom de la table....

    query(false ?
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  8. #8
    Futur Membre du Club
    Inscrit en
    Avril 2013
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 23
    Points : 7
    Points
    7
    Par défaut
    Bonjour,

    Deja merci Nicroman pour la syntax de la réquete

    Bon j'ai toujours un problème avec cette fonction, voici le code :
    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
     
    public ArrayList<Verre> getVerreWithDate(long [] d){
    		ArrayList<Verre> verreList = new ArrayList<Verre>();
    		long debut = d[0];
    		long fin = d[1];
    		Cursor c =bdd.query(TABLE_VERRE,
    				            new String [] { COL_ID_V, COL_DATE, COL_TYPE,COL_POINTS },
    				            SQL_FILTER_DATES,
    				            new String[] { Long.toString(debut), Long.toString(fin) },
    				            null, null, null, null );
     
    			while(c.moveToNext()){
    			Verre v = new Verre();
    			v.setId(c.getInt(NUM_COL_ID_V));
    			v.setDate(c.getLong(NUM_COL_DATE));
    			v.setType(c.getString(NUM_COL_TYPE));
    			v.setPoints(c.getInt(NUM_COL_POINTS));
    			verreList.add(v);
    			}
    			c.close();
    			return verreList;
    		}
    Pour les 2 dates debut et fin j'ai la même méthode qu'avant.
    A savoir la date du jour à 12h ainsi que la date du lendemain à 12H le tout en millisecondes.

    Lorsque je fais la requete, le cursor est vide. Pourtant j'ai bien ajouté des objets verre dans cette période.
    Pour tout verifier j'ai fait une méthode getAll()... Et lorsque je l'utilise, s'affiche bien le contenu de ma base qui n'est pas null.

    Le problème viens donc de la comparaison du long enregistré dans l'objet verre ( à la création de l'objet je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    date = Calendar.getInstance().getTimeInMillis();
    )
    et des long debut et fin.

  9. #9
    Futur Membre du Club
    Inscrit en
    Avril 2013
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 23
    Points : 7
    Points
    7
    Par défaut
    Eureka!!!

    J'ai changé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cal.set(Calendar.HOUR,12);
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cal.set(Calendar.HOUR_OF_DAY,12);


    merci encore Nicroman

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

Discussions similaires

  1. Date à insérer dans une requête sql
    Par raf64flo dans le forum SAS Base
    Réponses: 18
    Dernier message: 24/04/2008, 11h50
  2. Comment insérer la date actuelle dans une requête SQL ?
    Par AMINE07 dans le forum Bases de données
    Réponses: 7
    Dernier message: 15/11/2007, 16h47
  3. Requêtes SQL pour les Dates et numériques
    Par Ramage03 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/03/2006, 17h26
  4. [SQL2K] requête SQL, comparer des dates
    Par cortex024 dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 16/03/2006, 14h32
  5. Requête sql regroupement de dates
    Par rocs dans le forum Langage SQL
    Réponses: 1
    Dernier message: 28/07/2005, 16h40

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