rawQuery (query, selectionArgs)


87

Voglio usare la query di selezione per recuperare i dati dalla tabella. Ho trovato, rawQuery(query, selectionArgs)metodo di SQLiteDatabaseclasse per recuperare i dati. Ma io non so come l' querye selectionArgsdovrebbe essere passato al rawQuerymetodo?


Sito web per sviluppatori Android Lo sviluppatore Android è la migliore fonte per tutte queste piccole domande è la migliore fonte per tutte queste piccole domande
Tarun

Risposte:


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

Si passa un array di stringhe con un numero di elementi uguale a quello di "?"


1
rawQuery("SELECT id, name FROM people WHERE ?= ?", new String[] {"column_name", "David"});, è una validQuery?
theapache64

9
@ theapache64 non è una query valida. Il '?' è applicabile solo ai valori.
BMB

16

Forse questo può aiutarti

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

vedi sotto il codice che può aiutarti.

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

o

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

4
Perché questo è stato votato? Questo non mostra come utilizzare correttamente la funzionalità fornita da rawQuery. Il suo scopo è evitare di concatenare stringhe, ecc. Inoltre, la risposta di Rawkode dovrebbe essere accettata.
aMiGo

2
Non è così che dovrebbe essere usato rawQuery, dovresti usare? come segnaposto e secondo parametro per riempirli.
Eduardo Naveda

4
Indipendentemente da "come" dovresti usare rawQuery () , QUESTO è il modo più sensato, breve, comprensibile e standard in tutti gli altri linguaggi, a parte Java. Quindi questo è il modo preferito.
not2qubit

@aMiGo La stringa è comunque concatenata al livello sottostante.
Pascalius

Se concatenate un valore stringa, avrete problemi con il carattere '(ne occorrono 2 nella stringa) e con il carattere; (potrebbe creare effetti collaterali). Supponiamo che CustomerDbId sia una stringa che legge - '123'; cancella dal cliente - allora perderesti TUTTI i dati!
Martin

2

Per completezza e corretta gestione delle risorse:

        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

se la tua query SQL è questa

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

quindi rawQuery sarà

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();
}

Il nome e la famiglia sono il tuo risultato

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.