2010-12-07 6 views
1

Ma requête SQLite retourner un seul enregistrement, cependant, le tableau comporte plusieurs lignesSQLite Android rawquery retourne seulement le premier enregistrement

cursor=mydb.rawQuery("Select category from items;", null); 

J'ai même essayé GROUP BY mais encore ne fonctionnera pas. Je suis nouveau à SQLite, j'apprécierais toute aide. Merci.

+0

S'il vous plaît indiquer quelques lignes du contenu de votre table et le code après rawQuery utilisé pour inspecter le contenu pointé par le curseur. –

Répondre

6

tout d'abord votre requête de chaîne ne doit pas être résiliées aussi au lieu de passer comme:

"Select category from items;" 

vous devriez essayer passer comme:

"Select category from items" 

comme mentionné sur this page.

Egalement, faites-vous une boucle sur le curseur? Voici un exemple de la façon d'obtenir des données d'un curseur avec une boucle while:

ArrayList<String> results = new ArrayList<String>() 
while (cursor.moveNext()) { 
    results.add(cursor.getString(0)); // 0 is the first column 
} 
+0

Merci pour votre aide jackerran, j'ai enlevé ";" mais obtenant toujours le même résultat. Seul le premier enregistrement est renvoyé lorsque j'essaie d'exécuter la requête en tant que: "Sélectionnez une catégorie parmi les éléments GROUP BY category". cursor.getcount() renvoie une seule ligne. Si je cours la même requête dans sqlite sur mon bureau cela fonctionne bien. – Shafi

+0

Je supprimer le groupe par puisque vous ne devriez pas en avoir besoin. Avez-vous vérifié dans votre base de données que les enregistrements sont là? Et que vous vous connectez à la bonne base de données? Y a-t-il également des différences entre vos versions de java/sqlite/android sdk/et les systèmes d'exploitation entre votre environnement de bureau et portable? –

4

recherche d'abord:

Cursor cs = myDataBase.rawQuery("Your query", null); 
if (cs.moveToFirst()) { 
    String a = cs.getString(cs.getColumnIndex("your_column_name")); 
    cs.close(); 
    return a; 
} 
cs.close(); 
return ""; 

Obtenez les informations du curseur:

if (cs.moveToFirst()) { 
    ArrayList<String> results = new ArrayList<String>() 
    do { 
      results.add(cs.getString(cs.getColumnIndex("your_column_name"))); 
    } while (cs.moveNext()); 
} 

Sans si, j'ai pris une erreur dans mon projet. Mais cela a fonctionné pour moi. En passant, votre requête ne semble pas bonne. Si vous donnez des informations sur votre base de données, nous pouvons vous aider beaucoup plus.

2

Utilisez cette option pour sélectionner tous les éléments de la table:

curseur curseur = db.rawQuery ("SELECT * FROM Tablename, null);

0

vous n'avez pas besoin de méthode requête brute je pense. que la façon dont Android est mieux dans ce cas.

db.query(items, category, null, null, null, null, null); 

que d'utiliser le curseur comment est déjà écrit dans l'autre commentaire

1

cela peut vous aider

public ArrayList<mydata> getallContents() { 

    ArrayList<mydata> lst = new ArrayList<mydata>(); 

    SQLiteDatabase db = this.getReadableDatabase(); 

    Cursor c = db.rawQuery("select * from " + GAMETABLE, null); 

    if (c.moveToFirst()) { 
     do { 
      lst.add(new mydata(c.getString(1), 
        c.getString(3),c.getString(4),c.getString(5),c.getString(6))); 

     } while (c.moveToNext()); 
    } 
    db.close(); 
    return lst; 
} 
Questions connexes