带有WHERE子句的Android SQLite rawQuery将搜索字符串作为未找到的列返回

时间:2014-09-05 10:45:48

标签: java android sqlite

我创建了一个名为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?

2 个答案:

答案 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);