gpt4 book ai didi

android - SELECT 语句不返回 MAX 数

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

我在以下代码中遇到 SELECT 语句的问题(这是在我的数据库助手类中):

public Cursor selectMaxAreaNumber (long inspectionId) { 
String inspectionIdString = String.valueOf(inspectionId);
String[] tableColumns = new String[] {
AREA_NUMBER,
"(SELECT max(" + AREA_NUMBER + ") FROM " + AREAS_TABLE + ") AS max"
};
String whereClause = INSPECTION_LINK + " = ?";
String[] whereArgs = new String[] {
inspectionIdString
};
Cursor c = rmDb.query(AREAS_TABLE, tableColumns, whereClause, whereArgs,
null, null, null);


if (c != null) {
c.moveToFirst();
}
c.close();
return c;

}

然后我在我的 Activity 中调用它如下:

Cursor c = rmDbHelper.selectMaxAreaNumber(inspectionId); 
startManagingCursor(c);
c.moveToFirst();
nextAreaNumber = c.getInt(c.getColumnIndex("max")) + 1;

它正在从表中提取最大数量,因此 WHERE 语句似乎失败了。但是,我看不出问题出在哪里。

作为这个问题的一部分,任何人都可以通过在查询中使用 ID 之前将其转换为字符串来确认我是否在做正确的事情,我是否需要在两个位中都写入 c.moveToFirst()?

非常感谢!

最佳答案

试试这个:

public Cursor selectMaxAreaNumber (long inspectionId) { 
String[] tableColumns = new String[] {
"Max(" + AREA_NUMBER + ") AS max"
};
String whereClause = INSPECTION_LINK + " = ?";
String[] whereArgs = new String[] {
String.valueOf(inspectionId);
};
return rmDb.query(AREAS_TABLE, tableColumns, whereClause, whereArgs,
null, null, null);
}

这将返回一个具有最大 AREA_NUMBER 且具有适当的 inspectionId 的 Cursor。

一些注意事项:

  • 当您使用像 Max() 这样的函数时,结果只会得到一行,无需请求 AREA_NUMBERS 最大(AREA_NUMBERS)
  • 游标可能是,但它不会是null
  • 在使用 Cursor 之前不要关闭它

所以你不需要这个:

if (c != null) { 
c.moveToFirst();
}
c.close();

了解如果 c 不知何故为 null,您仍然会在 c.close() 上收到 NullPointerException


(可选)您可以删除 whereArgs 并只使用:

String whereClause = INSPECTION_LINK + " = " + inspectionId;

(只是因为inspectionIdlong数据类型,所以需要String来进行注入(inject)攻击。)


最后你应该在这里检查一个空的 Cursor:

Cursor c = rmDbHelper.selectMaxAreaNumber(inspectionId); 
startManagingCursor(c);
if(c.moveToFirst())
nextAreaNumber = c.getInt(c.getColumnIndex("max")) + 1;
else //empty Cursor, return a default value
nextAreaNumber = 0;

关于android - SELECT 语句不返回 MAX 数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12501484/

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