gpt4 book ai didi

android - 了解 SQLite 游标行为

转载 作者:行者123 更新时间:2023-11-29 21:53:46 25 4
gpt4 key购买 nike

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

在执行的这一点上,表是空的。我只是设置初始值。所以,我希望这个游标返回时是空的。但是相反,我收到一个错误(如下所示)。我正在使用的设置称为“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 returned: error code = 1, msg = no such column: lastPlayer

为什么说没有这个column lastPlayer?我以为我告诉查询查看“SETTING_COLUMN”列并返回该列值为“lastPlayer”的记录。我很困惑。有人可以理顺我吗?我已经看了一个小时了,但我只是看不出我做错了什么。

谢谢!

最佳答案

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

要正确构建查询,最好不要使用字符串串联手动执行此操作。相反,SQLiteDatabase.query() 的参数 selectionArgs就是为了做到这一点。

查询中的参数应定义为?,然后根据selectionArgs填写。来自文档:

You may include ?s in selection, which will be replaced by the values from selectionArgs, in order that they appear in the selection. The values will be bound as Strings.

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

String where = SETTING_COLUMN + " = ?";
Cursor cursor = db.query(table, resultColumn, where, new String[] { setting }, null, null, null);

关于android - 了解 SQLite 游标行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13750528/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com