我正在编写一种方法来更新表中的默认设置。该表非常简单:两列,第一列包含用于指示设置类型的标签,第二列用于存储设置的值。
在执行的这一点上,表是空的。我只是设置初始值。所以,我希望这个游标会变回空白。但相反,我收到了一个错误(如下所示)。我正在使用的设置称为“lastPlayer”,应该存储在“SETTINGS_TABLE”的“SETTING_COLUMN”中。这是代码:
public static void updateSetting(String setting, String newVal) {
String table = "SETTINGS_TABLE";
String[] resultColumn = new String[] {VALUE_COLUMN};
String where = SETTING_COLUMN + "=" + setting;
System.err.println(where);
SQLiteDatabase db = godSimDBOpenHelper.getWritableDatabase();
Cursor cursor = db.query(table, resultColumn, where, null, null, null, null);
System.err.println("cursor returned"); //I never see this ouput
\\more
}
sqlite返回:错误代码= 1,msg =没有这样的列:lastPlayer
为什么说没有这样的列 lastPlayer?我以为我告诉查询查看“SETTING_COLUMN”列并返回该列的值为“lastPlayer”的记录。我糊涂了。有人能把我拉直吗?我一直在寻找一个小时,我只是看不出我做错了什么。
谢谢!
答案 0 :(得分:2)
您没有正确构建/转发查询。由于值lastPlayer
不在引号中,因此您的语句正在检查两列的相等性,这就是该错误消息所说的内容。
要正确构建查询,最好不要使用字符串连接手动执行此操作。相反,SQLiteDatabase.query()的参数selectionArgs
意味着这样做。
您的查询中的参数应定义为?
,然后根据selectionArgs
填写。来自文档:
您可以在选择中包含?,它将被值替换 来自selectionArgs,以便它们出现在选择中。该 值将绑定为字符串。
所以,你的代码看起来像这样:
String where = SETTING_COLUMN + " = ?";
Cursor cursor = db.query(table, resultColumn, where, new String[] { setting }, null, null, null);