我创建了一个名为CHEMISTID的表:
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 String,以便在列名KEY_CHEMISTID中搜索特定的String chemistId?
答案 0 :(得分:4)
您需要在SQL中引用诸如Spain
之类的字符串,以便将它们视为字符串文字而不是列名称标识符。您可以使用'Spain'
之类的单引号。
然而,使用?
参数占位符代替并在选择args数组中提供参数值要好得多,例如:
... KEY_CHEMISTID + "=?" ...
c = db.rawQuery(selectQuery, new String[] { chemistID });
答案 1 :(得分:1)
你错过了单引号,所以改变
String selectQuery = "SELECT * FROM " + CHEMISTID +" WHERE " + KEY_CHEMISTID + " = "+ chemistID + ";";
到
String selectQuery = "SELECT * FROM " + CHEMISTID +" WHERE " + KEY_CHEMISTID + " = '"+ chemistID + "';";
推荐的解决方案是使用参数化查询作为
Cursor c = db.query(CHEMISTID, null, KEY_CHEMISTID + "=?",
new String[] { chemistID },null, null, null, null);