rawQuery (zapytanie, selectionArgs)


87

Chcę użyć zapytania wybierającego do pobierania danych z tabeli. Znalazłem rawQuery(query, selectionArgs)metodę SQLiteDatabaseklasy do pobierania danych. Ale nie wiem, jak queryi selectionArgsnależy przekazać rawQuerymetodę?


Witryna dla programistów Androida Programista Android jest najlepszym źródłem wszystkich tych małych zapytań jest najlepszym źródłem wszystkich tych małych zapytań
Tarun

Odpowiedzi:


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

Przekazujesz tablicę łańcuchową z taką samą liczbą elementów, jak masz "?"


1
rawQuery("SELECT id, name FROM people WHERE ?= ?", new String[] {"column_name", "David"});, czy to jest prawidłowe zapytanie?
theapache64

9
@ theapache64 to nie jest poprawne zapytanie. „?” ma zastosowanie tylko do wartości.
BMB

16

Może to ci pomoże

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

zobacz poniższy kod, który może ci pomóc.

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

lub

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

4
Dlaczego ten głos został zatwierdzony? To nie pokazuje, jak prawidłowo korzystać z funkcji udostępnianych przez rawQuery. Jego celem jest uniknięcie łączenia ciągów znaków itp. Ponadto należy zaakceptować odpowiedź Rawkode.
aMiGo

2
To nie jest sposób, w jaki powinno się używać rawQuery? jako symbole zastępcze i drugi parametr do ich wypełnienia.
Eduardo Naveda

4
Bez względu na to, "jak" masz używać rawQuery () , TO jest rozsądniejszy, krótszy, bardziej zrozumiały i standardowy sposób we wszystkich innych językach poza Javą. Więc to jest preferowane.
not2qubit

@aMiGo Ciąg i tak jest konkatenowany z warstwą poniżej.
Pascalius

Jeśli połączysz wartość ciągu, napotkasz problemy ze znakiem '(potrzebujesz 2 z nich w ciągu) i znakiem; (może powodować skutki uboczne). Załóżmy, że CustomerDbId to ciąg o treści - „123”; usuń od klienta - wtedy stracisz WSZYSTKIE dane!
Martin

2

Dla kompletności i prawidłowego zarządzania zasobami:

        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

jeśli twoje zapytanie SQL jest takie

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

wtedy rawQuery będzie

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

Imię i rodzina to Twój wynik

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.