2010-12-10 39 views
0

J'ai actuellement ma requête de base de données créée comme ceci:Comment puis-je convertir cette requête en rawQuery?

Edit, par la façon dont mes variables (_ID, CAT_ITEM et BUDGET_AMOUNT) contiennent actualy exactement le même texte et la mise en forme comme ils sont écrits, idiot je sais, mais de toute façon cela ne devrait pas être le problème

private String[] from = {_ID, CAT_ITEM, BUDGET_AMOUNT, }; 
private String orderBy = _ID + " ASC"; 
private String whereIn = "IN_OUT='in'"; 

Cursor cursor = db.query(CAT_BUD_TAB, from, whereIn, null, null, null, orderBy); 

ce qui fait exactement ce que je veux faire, mais je voulais essayer d'utiliser un rawQuery à la place (juste pour obtenir le blocage des instructions de requête et le tester, aussi je n'aurais pas besoin de tant de variables de chaîne).

Voici ce que je suis venu avec:

private String incomeQuery = "SELECT _ID, CAT_ITEM, BUDGET_AMOUNT FROM CAT_BUD_TAB WHERE IN_OUT=’in’"; 
Cursor cursor = db.rawQuery(incomeQuery, null); 

Cependant, cela ne fonctionne pas (je reçois le SQLException pas de colonne) donc je suis en train de travailler à ce que la différence est, je figure il y a juste Quelque chose ne va pas avec ma déclaration, mais aucune idée de quoi. Quelqu'un peut-il me donner des conseils? Merci

Répondre

1

De votre code, il ressemble à _ID, CAT_ITEM, BUDGET_AMOUNT et CAT_BUD_TAB sont des champs String. Leurs valeurs sont-elles les mêmes que les noms de champs?

Vos guillemets simples semblent également différents entre les deux requêtes.

Non lié à votre problème, mais vous devrez également ajouter ORDER BY _ID ASC à la fin du sql pour répliquer l'ordre des résultats.

+0

Désolé, j'ai oublié de mentionner que les variables que vous avez mentionnées ci-dessus sont des chaînes, mais elles contiennent exactement le même texte et le formatage (String CAT_ITEM = "CAT_ITEM", et ainsi de suite) Mais merci de l'avoir signalé, j'aurais dû dire quelque chose. De toute façon tu as raison! Je n'avais pas remarqué que les qoutes simples avaient l'air différentes! (J'ai copié le travail d'un guide) Merci de le signaler, maintenant si je peux juste travailler sur quelle touche appuyer sur mon clavier ça va être résolu :) Merci! – Holly

1

Dans votre premier exemple, vous avez les éléments suivants:

private String[] from = {_ID, CAT_ITEM, BUDGET_AMOUNT, }; 

Si cela est vrai, cela signifie que vous avez trois les variables _ ID, CAT_ITEM et BUDGET_AMOUNT avec les noms des colonnes dans ta table. La même chose vaut pour CAT_BUD_TAB qui contient probablement le nom de votre table.

Pour votre requête brute soit correcte, il devrait alors être écrit comme ceci:

String incomeQuery = "SELECT " + _ID + ", " + CAT_ITEM + ", " + BUDGET_AMOUNT + " FROM " + CAT_BUD_TAB + " WHERE IN_OUT=’in’"; 

Et juste pour avoir dit: ce n'est pas une belle façon de composer une chaîne. Il devrait plutôt être fait en utilisant un StringBuilder. Je l'ai fait comme ça ici pour plus de simplicité.

+0

Oh merci j'aurais dû le mentionner mais les trois variables sont en fait exactement les mêmes que leur contenu! (Je sais, idiot.) Mais cela signifie que ce n'est probablement pas un problème. Merci pour la réponse de toute façon! Et je vais regarder dans StringBuilder – Holly

+0

@Holly: pas du tout idiot d'avoir des variables avec la même valeur que leur nom - assurez-vous juste d'utiliser réellement la variable tout le temps;) Retour à votre question: vous devriez alors poster un peu plus de l'erreur. La 'SQLException no such column' en dit probablement un peu plus (j'espère que la colonne qu'elle ne trouve pas). – Nailuj

+0

@Holly: et encore une chose que vous pourriez faire. Essayez d'écrire simplement 'SELECT * FROM ...' juste pour voir que vous parvenez réellement à exécuter une requête brute. Si cela fonctionne, vous pouvez revenir en arrière pour essayer de récupérer uniquement les colonnes dont vous avez besoin. – Nailuj