1

我正在编写一种方法来更新表中的默认设置。该表非常简单:两列,第一列包含指示设置类型的标签,第二列存储设置的值。

在执行的这一点上,表是空的。我只是设置初始值。所以,我希望这个光标会空着回来。但相反,我收到了一个错误(如下所示)。我正在使用的设置称为“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”的记录。我很困惑。有人可以纠正我吗?我一直在寻找这个一个小时,我只是不明白我做错了什么。

谢谢!

4

1 回答 1

2

您没有正确构建/转义您的查询。由于该值lastPlayer不在引号中,因此您的语句正在检查两列是否相等,这就是该错误消息的含义。

要正确构建查询,最好不要使用字符串连接手动执行此操作。相反, SQLiteDatabase.query() 的参数selectionArgs旨在执行此操作。

查询中的参数应定义为?,然后根据selectionArgs. 从文档:

您可以在选择中包含 ?s,它将被 selectionArgs 中的值替换,以便它们出现在选择中。这些值将绑定为字符串。

因此,您的代码将如下所示:

String where = SETTING_COLUMN + " = ?";
Cursor cursor = db.query(table, resultColumn, where, new String[] { setting }, null, null, null);
于 2012-12-06T19:04:48.460 回答