我正在写一种更新表中默认设置的方法。该表非常简单:两列,第一列包含用于指示设置类型的标签,第二列用于存储设置的值。
在执行的这一点上,表为空。我只是设置初始值。因此,我希望该游标会变空。但是,相反,我遇到了一个错误(如下所示)。我正在使用的设置称为“ 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,味精=没有这样的列:lastPlayer
为什么说没有这样的列lastPlayer?我以为我是在告诉查询查看“ SETTING_COLUMN”列,并返回该列的值为“ lastPlayer”的记录。我很困惑。有人可以理顺我吗?我已经看了一个小时了,只是看不到我做错了什么。
谢谢!
最佳答案
您没有正确建立/转义查询。由于值lastPlayer
不在引号中,因此您的语句正在检查两列是否相等,这就是该错误消息所说的内容。
为了正确地构建查询,最好不要通过String串联手动进行此操作。取而代之的是SQLiteDatabase.query()的参数selectionArgs
。
查询中的参数应定义为?
,然后根据selectionArgs
进行填写。从文档:
您可以在选择中包括?s,这些值将被替换为
来自selectionArgs,以便它们出现在选择中。的
值将绑定为字符串。
因此,您的代码如下所示:
String where = SETTING_COLUMN + " = ?";
Cursor cursor = db.query(table, resultColumn, where, new String[] { setting }, null, null, null);