【问题标题】:How does one get the number of rows in an SQL database?(Android SDK)如何获取 SQL 数据库中的行数?(Android SDK)
【发布时间】:2011-12-30 20:34:19
【问题描述】:

我在 SO 上查找了这个并看到了这个(以及其他类似的):sql direct way to get number of rows in table,但是,Select 显示为一个标记,就像计数一样。我尝试使用 mDb.execSQL() 但只返回 void。任何有关如何做到这一点的帮助将不胜感激。代码是:
public int getRowNumber(){ return mDb.execSQL("SELECT COUNT(*) FROM notes");} 我收到一条错误消息,提示“无法返回无效结果”。

【问题讨论】:

  • 你的代码是什么样的?它不应该返回无效。您发布的答案中的方法是正确的
  • public int getRowNumber(){ return mDb.execSQL("SELECT COUNT(*) FROM notes");} 我收到一条错误消息,提示“无法返回无效结果”。感谢收看。
  • 再次阅读文档 .... execSQL 不适用于查询!!!!!!!

标签: android sql database


【解决方案1】:

您遇到的错误意味着您的方法无法返回 void. execSQL 本身返回一个 void,并且您从自己的方法返回相同的 void,该方法被声明为返回一个 int:

mDB.execSQL(...); // returns void
return mDB.execSQL(...); // re-returns void

public int foo() {
    return void; // error!
}

d.android.com link for reference.


我知道你已经接受了,但这里有一个快速而肮脏的测试方法,可以满足你的需要:

    public int testCount() {
     Cursor c = m_db.rawQuery("select count(*) from mytable", null);
     int tst = 0;
     if (c.moveToNext()) {
         tst = c.getInt(c.getColumnIndex("count(*)"));
     }
     c.close();
     return tst;
  }

【讨论】:

  • 谢谢,我如何让它不返回 void 并返回我执行的结果?
  • 看到你不能改变execSQL的返回类型,你必须做一些像query这样的事情并读取返回的Cursor来找到结果的int值,然后从你的方法中返回它。
  • 不!更新了一个简单的例子。
【解决方案2】:

mDB.execSQL(...);返回 void 并且您的选择查询返回计数,这就是您收到错误的原因。相反,您可以使用查询(或)rawQuery,例如 mDb.rawQuery("SELECT COUNT(*) AS cnt FROM notes",null);它返回 Cursor,从 Cursor 中获取 'cnt'。

【讨论】:

    猜你喜欢
    • 2014-04-02
    • 1970-01-01
    • 2015-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-24
    • 1970-01-01
    • 2012-11-20
    相关资源
    最近更新 更多