2013-07-31 5 views
1

У меня есть запрос, в котором у меня есть несколько В заявлениях.Как написать запрос типа IN в android (предварительно заполненная база данных)

Запрос


выберите TCF.Car_Make, TCF.Car_Model, TCF.Car_Ver, Цены, Rear_Parking_Sensors, Подушки безопасности, Engine_Immobilizer, Power_Windows, Integrated_In_Dash_Music_System, Steering_Adjustment из Car_Feature AS TCF РЕГИСТРИРУЙТЕСЬ Car_Spec AS ТКС где TCF._id = TCS._id и TCS.Цены между '0' и '80, 00,00,000 'и TCS.Fuel_Type IN («Бензин», «Дизель», «null», «null») и TCF.Car_Make IN («null», «null», «null», «null», «null», «null», «null», «Force Motors», «Ford», «Hindustan Motors», «Honda», «null», «null», «null», «Lamborghini», «Land Rover», «null», «null», «null», «null», «null», «null», «null», «null», «null »,„нуль“,„нуль“,„нуль“,„нуль“,„нуль“,„нулевой“)


мой запрос отлично работает, когда я исполняю его в Sqlite браузере.

Но когда я пытаюсь выполнить тот же запрос в моем вспомогательном классе с использованием db.execSQL() заявления он не работает.

Мои Logcat показывает ошибку

07-31 05:06:03.085: E/AndroidRuntime(334): Caused by: android.database.sqlite.SQLiteException: unknown error: Queries cannot be performed using execSQL(), use query() instead. 

Это говорит использовать db.query() заявление.

Путаница в том, как я использую В заявление в db.query()

Может кто-нибудь, пожалуйста, помогите мне.

ответ

2

В документации указано, что вы не можете использовать SQLiteDatabase.execSQL() для выполнения Select или любого другого оператора SQL, который возвращает данные. Из документа SQLiteDatabase.execSQL():

Выполнение одной инструкции SQL, которая НЕ является SELECT или какой-либо другой операцией SQL, которая возвращает данные. У него нет средств для возврата каких-либо данных (например, количество затронутых строк). Вместо этого вам рекомендуется использовать insert (String, String, ContentValues), update (String, ContentValues, String, String []) и другие, когда это возможно.

Edit: Вы можете использовать rawQuery(), чтобы сформировать свой параметризованный запрос, как в:

String query = "SELECT * FROM table" 
+ " WHERE name IN ("+ createPlaceholders(names.length) +")"; 
Cursor c = db.rawQuery(query, names); 

В этом случае давайте предположим, что createPlaceholders() возвращает строку, содержащую names.length разделенные запятой? ».

Смежные вопросы