rawQuery (consulta, selectionArgs)

87

Quiero usar la consulta de selección para recuperar datos de la tabla. He encontrado, rawQuery(query, selectionArgs)método de SQLiteDatabaseclase para recuperar datos. Pero no sé cómo el queryy selectionArgsdeberán ser pasados al rawQuerymétodo?

sree_iphonedev
fuente
Sitio web para desarrolladores de Android El desarrollador de Android es la mejor fuente para todas estas pequeñas consultas es la mejor fuente para todas estas pequeñas consultas
Tarun

Respuestas:

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

Pasa una matriz de cadenas con un número igual de elementos que "?"

Rawkode
fuente
1
rawQuery("SELECT id, name FROM people WHERE ?= ?", new String[] {"column_name", "David"});, ¿es esta una consulta válida?
theapache64
9
@ theapache64 no es una consulta válida. Los '?' solo es aplicable a valores.
BMB
16

Tal vez esto pueda ayudarle

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
fuente
3

vea el código a continuación que puede ayudarlo.

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);
Dhaval Parmar
fuente
4
¿Por qué se vota a favor de esto? Esto no muestra cómo utilizar correctamente la funcionalidad proporcionada por rawQuery. Su propósito es evitar la concatenación de cadenas, etc. Además, se debe aceptar la respuesta de Rawkode.
aMiGo
2
Así no es como debería usarse rawQuery, ¿debería usar? como marcadores de posición y el segundo parámetro para completarlos.
Eduardo Naveda
4
Independientemente de "cómo" se supone que debe usar rawQuery () , ESTA es la forma más sensible, corta, comprensible y estándar en todos los demás lenguajes, aparte de Java. Así que esta es la forma preferida.
not2qubit
@aMiGo La cadena está concatenada de todos modos en la capa de abajo.
Pascalius
Si concatenas un valor de cadena, tienes problemas con el carácter '(necesita 2 de ellos en la cadena) y el carácter; (puede crear efectos secundarios). Suponga que CustomerDbId es una cadena que dice - '123'; eliminar del cliente, ¡entonces perderá TODOS los datos!
Martin
2

Para una gestión completa y correcta de los recursos:

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

si su consulta SQL es esta

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

entonces rawQuery será

String query="SELECT id, name, roll FROM student WHERE name = ? AND roll = ?";
String[] selectionArgs = {"Amit","7"} 
db.rawQuery(query, selectionArgs);
Puneet Verma
fuente
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();
}

El nombre y la familia son tu resultado

faeze saghafi
fuente