rawQuery (query, selectionArgs)

87

Quero usar a consulta selecionada para recuperar dados da tabela. Eu encontrei, rawQuery(query, selectionArgs)método de SQLiteDatabaseclasse para recuperar dados. Mas não sei como o método querye selectionArgsdeve ser passado rawQuery?

sree_iphonedev
fonte
Site do desenvolvedor Android Android developer é a melhor fonte para todas essas pequenas consultas é a melhor fonte para todas essas pequenas consultas
Tarun

Respostas:

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

Você passa um array de string com um número igual de elementos que você tem "?"

Rawkode
fonte
1
rawQuery("SELECT id, name FROM people WHERE ?= ?", new String[] {"column_name", "David"});, esta é uma validQuery?
theapache64 de
8
@ theapache64 não é uma consulta válida. O '?' é aplicável apenas a valores.
BMB
15

Talvez isso possa te ajudar

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

veja o código abaixo, ele pode ajudá-lo.

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
fonte
4
Por que isso foi votado? Isso não mostra como usar corretamente a funcionalidade fornecida por rawQuery. Seu objetivo é evitar a concatenação de Strings, etc. Além disso, a resposta de Rawkode deve ser aceita.
AMiGo
2
Não é assim que rawQuery deve ser usado, você deve usar? como espaços reservados e o segundo parâmetro para preenchê-los.
Eduardo Naveda
4
Independentemente de "como" você deve usar rawQuery () , ESSA é a forma mais sensível, curta, compreensível e padrão em todas as outras linguagens, exceto Java. Portanto, esta é a forma preferida.
not2qubit
@aMiGo A string é concatenada de qualquer maneira na camada abaixo.
Pascalius de
Se você concatenar um valor de string, terá problemas com o caractere '(são necessários 2 deles na string) e o caractere; (pode criar efeitos colaterais). Suponha que CustomerDbId seja uma string que lê - '123'; excluir do cliente - então você perderia TODOS os dados!
Martin
2

Para integridade e gerenciamento correto de 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();
        }
Entre
fonte
2

se sua consulta SQL é esta

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

então rawQuery será

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

Nome e família são o seu resultado

faeze saghafi
fonte