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?


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 "?"


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


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

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

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

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.