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?

sree_iphonedev
la source
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 "?"

Rawkode
la source
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();
}
user1208720
la source
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);
Dhaval Parmar
la source
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();
        }
Entrez
la source
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);
Puneet Verma
la source
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

faeze saghafi
la source