rawQuery (запрос, selectionArgs)

87

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

sree_iphonedev
источник
Сайт разработчика Android. Разработчик Android - лучший источник для всех этих небольших запросов, лучший источник для всех этих небольших запросов
Тарун,

Ответы:

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

Вы передаете строковый массив с таким же количеством элементов, как и у вас "?"

Rawkode
источник
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();
}
user1208720
источник
10

Один пример rawQuery - db.rawQuery("select * from table where column = ?",new String[]{"data"});

Тарун
источник
Что такое новый String [] {"data"}? Не могли бы вы просто пояснить сказанное выше. Заранее спасибо.
sree_iphonedev
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();
}

Имя и семья - ваш результат

Faeze saghafi
источник