我将此作为我的查询:
public Cursor getQuests(int level) {
final String[] columns = new String[] {KEY_ID, "title", "minUC", "maxUC", "xp", "ep", "request", "loot", "level", "numHits", "numHitsReq"};
return db.query(QUESTS, columns, "level<=\"" + level + "\"", null, null, null, KEY_ID + ", level");
}
因此,我的数据库中的条目达到了10级。此查询通常可以达到一个点,而玩家等级小于10,一切都按预期工作,但是当玩家等级为11或更高时,查询只会返回等级为1的行。
当我删除级别周围的转义引号时,它返回一个空光标。我做错了吗?
答案 0 :(得分:1)
您的问题很可能是由于数据库中的LEVEL列是文本/字符串。然后你将它与另一个字符串进行比较:
"1" <= "11"
"10" <= "11"
"11" <= 11"
but
"2" > "11"
但是,如果您要比较这些值,您将获得预期的结果
1 <= 11
2 <= 11
and so on
11 <= 11
将数据库列更改为INTEGER并删除查询中级周围的引号 - 您就可以了。
答案 1 :(得分:0)
我建议你使用“预备语句范式”,即尝试如下:
final String table = QUESTS;
final String columns = {
KEY_ID,
"title",
"minUC",
"maxUC",
"xp",
"ep",
"request",
"loot",
"level",
"numHits",
"numHitsReq"
};
final String constraint = "level<=?";
final String constraintArgs = {
Integer.toString(level)
};
final String groupBy = null;
final String having = null;
final String orderBy = KEY_ID + ", level ASC";
db.query(table, columns, constraint, constraintArgs, groupBy, having, orderBy);
您可能希望根据需要更改排序顺序(从ASC到DESC)。另外我假设您将实际级别作为整数注入函数。如果不是这样,您可能希望将constraintArgs
从Integer.toString(level)
更改为其他内容。
关键是这样你让sqlite数据库引擎决定如何解释级别值。