我创建了一个表叫CHEMISTID搜索字符串:的Android的SQLite rawQuery与WHERE子句返回的行中找不到
private static final String CREATE_TABLE_CHEMISTID = "CREATE TABLE "
+ CHEMISTID + "(" + KEY_ID + " INTEGER PRIMARY KEY, " + KEY_CHEMISTID
+ " TEXT" + ")";
我插入功能工作正常,但是当我运行一个搜索查询发现,如果chemistId已经目前使用下面的查询语句:
String selectQuery = "SELECT * FROM " + CHEMISTID +" WHERE " + KEY_CHEMISTID + " = "+ chemistID + ";";
Cursor c = db.rawQuery(selectQuery,null);
我的logcat显示以下错误消息:
E/AndroidRuntime(1169): FATAL EXCEPTION: main
E/AndroidRuntime(1169): android.database.sqlite.SQLiteException: no such column: Spain (code 1): , while compiling: SELECT * FROM chemistIdTable WHERE chemistId = Spain;
西班牙是一个特殊的化学家,我是在我的程序中动态创建的。
我该如何修复selectQuery字符串,以便在列名KEY_CHEMISTID中搜索特定字符串chemistId?
非常感谢我不仅向我展示了正确答案,而且让我了解了背后的逻辑。为了使用子查询对复杂查询实现相同的逻辑,我应该将其分割成不同的查询字符串吗? 字符串selectQuery = “SELECT * FROM” + DATE + “WHERE” + KEY_ID + “= '(SELECT ”+ KEY_DATE_ID \t \t +“ FROM ”+ CHEMISTID_DATE_ORDERNUMBER_ORDERDATA + “ WHERE ”+ KEY_CHEMISTID_ID +“='(SELECT” + KEY_ID +“FROM”+ CHEMISTID +“WHERE”+ KEY_CHEMISTID +“=”+ chemistId +“)')'AND”+ KEY_DATE +“='”+ date +“'”; – 2014-09-05 11:07:07
查询字符串中可以有多个'?'。只需在选择参数数组中提供相等数量的值。 – laalto 2014-09-05 11:09:14
这是否是正确的解决方案? (SELECT)+ KEY_ID +“FROM”+ CHEMISTID_DATE_ORDERNUMBER_ORDERDATA +“WHERE”+ KEY_CHEMISTID_ID +“=(SELECT”+ KEY_ID +“FROM “+ CHEMISTID +”WHERE“+ KEY_CHEMISTID +”=?“+”))AND“+ KEY_DATE +”=?“; Log.e(LOG,selectQuery); SQLiteDatabase db = this.getReadableDatabase(); Cursor c = db.rawQuery(selectQuery,new String [] {chemistId,date});' – 2014-09-05 11:21:09