1 回答
TA贡献1824条经验 获得超5个赞
我相信您的问题是您返回的是第一个选定的投球手的 ID 而不是行数。
也就是你,检查行数大于0后,移动到第一行,然后使用count = cursor.getInt(0);这将是已提取的第一行的第一列中存储的值。
尝试使用:-
public String leagueBowlerCount(String leagueId)
{
String rv = "0";
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.query(Bowler.TABLE_NAME,new String[]{"count(*)"},Bowler.COLUMN_LEAGUE_ID + "=?",new String[]{leagueId},null,null,null);
if (cursor.moveToFirst()) {
rv = String.valueOf(cursor.getLong(0));
}
cursor.close();
db.close();
return rv;
}
这使用聚合函数计数来提取相应联赛的行数。
请注意,以上代码是原理代码,尚未经过测试或运行,因此可能存在一些错误。
或者你可以使用: -
public String leagueBowlerCount(String leagueId)
{
SQLiteDatabase db = this.getReadableDatabase();
String countQuery = "SELECT * FROM " + Bowler.TABLE_NAME + " WHERE " + Bowler.COLUMN_LEAGUE_ID + " = '" + leagueId + "'";
Cursor cursor = db.rawQuery(countQuery, null);
int count = cursor.getCount();
cursor.close();
db.close();
return String.valueOf(count);
}
关于您的代码:-
int count = 0;
if(null != cursor)
if(cursor.getCount() > 0){
cursor.moveToFirst();
count = cursor.getInt(0);
}
cursor.close();
检查 null Cursor 是没有用的,因为从 SQLiteDatabase 方法(例如 rawQuery)返回的 Cursor 永远不会为 null。相反,将返回一个有效的、可能为空的 Cursor。
此外,使用该方法检查 Cursor 是否有行getCount,然后moveToFirst不需要使用,因为仅使用if (cursor.moveToFirst) {.....}就足够了,因为如果没有行,该moveToFirst方法将返回 false,因为无法执行移动。
添加回答
举报