2011-12-30 148 views
1

我在SO上查找并看到了这个(和其他人喜欢它):sql direct way to get number of rows in table,但是,Select被显示为一个标记,就像count一样。我试图使用mDb.execSQL(),但只返回void。任何帮助如何做到这一点,将不胜感激。代码是:
public int getRowNumber(){return mDb.execSQL(“SELECT COUNT(*)FROM notes”);}我得到一个错误,说“无法返回无效的结果”。如何获取SQL数据库中的行数?(Android SDK)

+1

你的代码是什么样的?它不应该返回无效。在你发布的答案中的方法是正确 – 2011-12-30 20:37:52

+0

public int getRowNumber(){ \t return mDb.execSQL(“SELECT COUNT(*)FROM notes”);}我得到一个错误,说“无法返回无效结果”。感谢您的期待。 – jersam515 2011-12-30 20:40:13

+0

再次阅读文档.... execSQL不适合查询!!!!!!! – Selvin 2011-12-30 20:49:31

回答

2

你得到的错误意味着你的方法不能返回void.execSQL本身返回无效的,而且你回来从你自己的方法相同的虚空当中被声明为返回一个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; 
    } 
+0

谢谢,我如何得到它不返回无效并返回我执行它的结果? – jersam515 2011-12-30 20:48:12

+1

由于您无法更改'execSQL'的返回类型,因此您必须执行一些其他操作,比如'query'并读取返回的Cursor以查找结果的int值,然后从您的方法返回该值。 – Pedantic 2011-12-30 20:50:15

+0

非常感谢。 – jersam515 2011-12-30 20:52:17

1

mDB.execSQL(...);返回void,并且您的选择查询返回计数,这就是您遇到错误的原因。相反,你可以使用query(或)rawQuery,如mDb.rawQuery(“SELECT COUNT(*)AS cnt FROM notes”,null);从Cursor返回Cursor,得到'cnt'。

+0

谢谢你。 – jersam515 2011-12-30 20:58:47

相关问题