我有一个查询,其中我有多个 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 语句任何人都可以帮助我。
答案 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逗号分隔的'?'的字符串。