rawQuery (requête, selectionArgs)


87

Je souhaite utiliser la requête de sélection pour récupérer les données de la table. J'ai trouvé, rawQuery(query, selectionArgs)méthode de SQLiteDatabaseclasse pour récupérer des données. Mais je ne sais pas comment le queryet selectionArgsdoit être passé à la rawQueryméthode?


Site Web de développeur Android Le développeur Android est la meilleure source pour toutes ces petites requêtes est la meilleure source pour toutes ces petites requêtes
Tarun

Réponses:


221
rawQuery("SELECT id, name FROM people WHERE name = ? AND id = ?", new String[] {"David", "2"});

Vous passez un tableau de chaînes avec un nombre égal d'éléments que vous avez "?"


1
rawQuery("SELECT id, name FROM people WHERE ?= ?", new String[] {"column_name", "David"});, est-ce une requête valide?
theapache64

9
@ theapache64 ce n'est pas une requête valide. Le '?' ne s'applique qu'aux valeurs.
BMB

16

Peut-être que cela peut vous aider

Cursor c = db.rawQuery("query",null);
int id[] = new int[c.getCount()];
int i = 0;
if (c.getCount() > 0) 
{               
    c.moveToFirst();
    do {
        id[i] = c.getInt(c.getColumnIndex("field_name"));
        i++;
    } while (c.moveToNext());
    c.close();
}


3

voir ci-dessous le code cela peut vous aider.

String q = "SELECT * FROM customer";
Cursor mCursor = mDb.rawQuery(q, null);

ou

String q = "SELECT * FROM customer WHERE _id = " + customerDbId  ;
Cursor mCursor = mDb.rawQuery(q, null);

4
Pourquoi est-ce voté à la hausse? Cela ne montre pas comment utiliser correctement les fonctionnalités fournies par rawQuery. Son but est d'éviter de concaténer des chaînes, etc. De plus, la réponse de Rawkode doit être acceptée.
aMiGo

2
Ce n'est pas ainsi que rawQuery doit être utilisé, vous devriez utiliser? comme espaces réservés et le deuxième paramètre pour les remplir.
Eduardo Naveda

4
Indépendamment de "comment" vous êtes censé utiliser rawQuery () , CECI est la manière la plus sensée, courte, compréhensible et standard dans tous les autres langages, à part Java. C'est donc préférable.
not2qubit

@aMiGo La chaîne est concaténée de toute façon la couche en dessous.
Pascalius

Si vous concaténez une valeur de chaîne, vous rencontrez des problèmes avec le caractère '(il en faut 2 dans la chaîne) et le caractère; (peut créer des effets secondaires). Supposons que CustomerDbId est une chaîne qui lit - '123'; supprimer du client - alors vous perdriez TOUTES les données!
Martin

2

Pour une gestion complète et correcte des ressources:

        ICursor cursor = null;
        try
        {

            cursor = db.RawQuery("SELECT * FROM " + RECORDS_TABLE + " WHERE " + RECORD_ID + "=?", new String[] { id + "" });

            if (cursor.Count > 0)
            {
                cursor.MoveToFirst();
            }
            return GetRecordFromCursor(cursor); // Copy cursor props to custom obj
        }
        finally // IMPORTANT !!! Ensure cursor is not left hanging around ...
        {
            if(cursor != null)
                cursor.Close();
        }

2

si votre requête SQL est la suivante

SELECT id,name,roll FROM student WHERE name='Amit' AND roll='7'

alors rawQuery sera

String query="SELECT id, name, roll FROM student WHERE name = ? AND roll = ?";
String[] selectionArgs = {"Amit","7"} 
db.rawQuery(query, selectionArgs);

0
String mQuery = "SELECT Name,Family From tblName";
Cursor mCur = db.rawQuery(mQuery, new String[]{});
mCur.moveToFirst();
while ( !mCur.isAfterLast()) {
        String name= mCur.getString(mCur.getColumnIndex("Name"));
        String family= mCur.getString(mCur.getColumnIndex("Family"));
        mCur.moveToNext();
}

Le nom et la famille sont votre résultat

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.