如何在android(预填充数据库)中编写IN类型查询

时间:2013-07-31 06:01:20

标签: android sqlite android-sqlite

我有一个查询,其中我有多个 In语句

查询


选择TCF.Car_Make,TCF.Car_Model,TCF.Car_Ver,价格,Rear_Parking_Sensors,安全气囊,Engine_Immobilizer,Power_Windows,Integrated_In_Dash_Music_System,来自Car_Feature的Steering_Adjustment AS TCF JOIN Car_Spec AS TCS其中TCF._id = TCS._id和TCS.Prices之间'0'和'80,00,00,000'和TCS.Fuel_Type IN (“Petrol”,“Diesel”,“null”,“null”)和TCF。 Car_Make IN (“null”,“null”,“null”,“null”,“null”,“null”,“null”,“Force Motors”, “Ford”,“Hindustan Motors”,“Honda”,“null”,“null”,“Lamborghini”,“Land Rover”,“null”,“null”,“null”,“null”,“null”, “null”,“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()

中使用 IN 语句

任何人都可以帮助我。

1 个答案:

答案 0 :(得分:2)

该文档指出您不能使用SQLiteDatabase.execSQL()来执行Select或任何其他返回数据的SQL语句。从SQLiteDatabase.execSQL()doc:

  

执行一个非SELECT的SQL语句或任何其他返回数据的SQL语句。它无法返回任何数据(例如受影响的行数)。相反,我们鼓励您尽可能使用insert(String,String,ContentValues),update(String,ContentValues,String,String [])等。

编辑:您可以使用rawQuery()来形成参数化查询,如下所示:

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

在这种情况下,我们假设createPlaceholders()返回一个包含names.length逗号分隔的'?'的字符串。