【问题标题】:how to get count column如何获取计数列
【发布时间】:2010-05-12 09:20:35
【问题描述】:

我想从光标中获取 Count 列的值。

public Cursor getRCount(String iplace) throws SQLException
{
 try {
      String strSql = "SELECT COUNT(_id) AS RCount FROM tbName WHERE place= '" + iplace + "'";            
      return db.rawQuery(strSql, null);
    } catch (SQLException e) {
        Log.e("Exception on query", e.toString());
        return null;
    }
} 

我试图从光标中获取此计数列值,如下所示

Cursor cR = mDbHelper.getRCount(cplace);if (cR.getCount() > 0){long lCount = cR.getLong(0);}cR.close();}

我得到了调试错误。如何得到它?

PS:我可以使用嵌套游标吗?

【问题讨论】:

  • 你确定这是 .NET 吗?它看起来像 Java。

标签: android cursor


【解决方案1】:

您应该使用DatabaseUtils.longForQuery 实用方法在数据库上运行查询并返回第一行第一列中的值。

int sometotal=DatabaseUtils.longForQuery(db,"SELECT COUNT(_id) AS RCount FROM tbName WHERE place= '" + iplace + "'",null);

【讨论】:

  • 谢谢,奔腾。我将类型转换添加到 int。 int sometotal=(int)DatabaseUtils.longForQuery(db,"SELECT COUNT(_id) AS RCount FROM tbName WHERE place= '" + iplace + "'",null);
【解决方案2】:

当您从rawQuery() 取回Cursor 时,它位于第一行之前。在尝试使用Cursor 之前致电moveToFirst(),您的问题应该会消失。

【讨论】:

  • 如果光标已经在记录的开头,moveToFirst() 方法有什么帮助?
  • @AJW:一个新的Cursor 不是“已经在记录的开头”。新的Cursor 的位置第一行,而不是第一行。
  • 明白了。您知道就大型数据库的效率而言,使用 Cursor 的 rawQuery 方法或 DatabaseUtils.longForQuery 方法会更好吗?
  • @AJW:我不知道longForQuery() 做了什么。我建议您就此提出一个单独的 Stack Overflow 问题。
  • 会的,泰。 p.s. 2 年前我刚开始接触 Java 和 Android 时,很喜欢阅读您的 Busy Coder 的书。干杯。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-22
  • 2011-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多