rawQuery (query, selectionArgs)


87

Я хочу використовувати обраний запит для отримання даних із таблиці. Я знайшов, rawQuery(query, selectionArgs)метод SQLiteDatabaseкласу для отримання даних. Але я не знаю, як queryі як selectionArgsслід передавати rawQueryметод?


Веб-сайт розробника Android Розробник Android - найкраще джерело для всіх цих невеликих запитів - найкраще джерело для всіх цих невеликих запитів
Тарун

Відповіді:


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

Ви передаєте масив рядків з рівною кількістю елементів, як у вас "?"


1
rawQuery("SELECT id, name FROM people WHERE ?= ?", new String[] {"column_name", "David"});, це допустимий запит?
theapache64

9
@ theapache64 це не дійсний запит. "?" застосовується лише до значень.
BMB

16

Можливо, це може вам допомогти

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

див. нижче код, це може вам допомогти.

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

або

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

4
Чому за це голосують? Це не показує, як правильно використовувати функціонал, наданий rawQuery. Його метою є уникнення об'єднання рядків тощо. Також слід прийняти відповідь Rawkode.
aMiGo

2
Це не те, як слід використовувати rawQuery, а ви повинні використовувати? як заповнювачі та другий параметр для їх заповнення.
Едуардо Наведа

4
Незалежно від того, як ви повинні використовувати rawQuery () , ЦЕ є більш розумним, коротким, зрозумілим та стандартним способом для всіх інших мов, крім Java. Отже, це кращий спосіб.
not2qubit

@aMiGo Рядок так чи інакше об'єднаний шар нижче.
Паскалій

Якщо ви об'єднаєте значення рядка, ви отримаєте проблеми з символом '(їх потрібно 2 у рядку) та символом; (може створити побічні ефекти). Припустимо, CustomerDbId - це рядок, який читається - '123'; видалити з клієнта - тоді ви втратите ВСІ дані!
Мартін,

2

Для повноти та правильного управління ресурсами:

        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

якщо ваш запит SQL такий

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

тоді rawQuery буде

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

Ім’я та сім’я - це ваш результат

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.