2010-07-17 4 views
2

J'ai une requête qui tire tout d'une base de données dans une vue de liste.SQLite et Android. Comment utiliser String Ayant dans ma requête?

return mDb.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_HEIGHT, KEY_BODY, KEY_HOMEID},null , null, null, null, null,null);

       |    String Having is the 3rd from 
                  last null. 

Je veux que les enregistrements où le KEY_HOMEID champ correspond une variable appelée journalId qui doit être une chaîne numérique.

Je voudrais aussi savoir comment apporter la variable dans mon DatabaseAdapter ... ((resource) this.getApplication()).getjournalId()) travaillerait ?? resource est une classe qui étend l'application.

Répondre

3

Premièrement, il serait utile de poster des messages d'erreur plutôt que «pas de dés».

Deuxièmement, veuillez lire la documentation pour SQLiteDatabase.query(). Les mots clés SQL tels que "FROM" et "HAVING" ne doivent pas faire partie de l'appel de méthode.

Vous avez déjà transmis le nom de la table en tant que premier paramètre à query(), l'écriture de "FROM DATABASE_NAME WHERE ..." est donc redondante et entraînera la formation d'une requête non valide.

Troisièmement, vous ne pouvez pas transmettre de noms de variables Java dans le cadre du paramètre selection String — Vous devez avoir une chaîne comme: KEY_HOMEID +"="+ journalId.

Quatrièmement, c'est généralement une bonne idée d'utiliser selectionArgs plutôt que d'incorporer les paramètres de requête dans le selection. Surtout quand vous avez des chaînes ou des paramètres provenant de l'entrée de l'utilisateur.
par exemple. selection = KEY_HOMEID +"=?" et selectionArgs = new String[] { journalId }

Dans l'ensemble, votre appel de méthode devrait ressembler à:.

mDb.query(DATABASE_TABLE, 
      new String[] { KEY_ROWID, KEY_HEIGHT, 
         KEY_BODY, KEY_HOMEID }, 
      KEY_HOMEID +"=?", new String[] { journalId }, 
      null, null, null); 
+0

Comment utiliser String Ayant dans ma requête? en bref comment comparer les valeurs de chaîne dans la clause Having? –

2

Utilisez une clause WHERE; HAVING est uniquement utilisé avec GROUP BY.

+0

serait SELECT * FROM DATABASE_TABLE OÙ KEY_HOMEID = ((ressource) this.getApplication()) getjournalId()); travail? où devrais-je le mettre en relation avec la requête? – Brian

+0

curseur fetchAllNotes public (chaîne journalId) { retour mDb.query (DATABASE_TABLE, new String [] {KEY_ROWID, KEY_HEIGHT, \t KEY_BODY, KEY_HOMEID}, "DE DATABASE_TABLE OU KEY_HOMEID = journalId", null, null, null, null, nul); c'est où je suis à ce moment toujours pas de dés – Brian

+0

'HAVING est seulement utilisé avec les fonctions Aggregate –

Questions connexes