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

sree_iphonedev
źródło
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 "?"

Rawkode
źródło
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();
}
user1208720
źródło
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);
Dhaval Parmar
źródło
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();
        }
Wejdź
źródło
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);
Puneet Verma
źródło
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

faeze saghafi
źródło