如何在没有LIMIT的情况下获取游标数量?

时间:2016-06-10 19:47:56

标签: android android-sqlite android-cursor

我从游标中设置ListView,抓取数据库中的前10行(LIMIT)。

    cursor = db.query("MYTABLE",
            new String[]{"_id", "NUMBER", "NAME"}, null, null, null, null, null, "10");

列表设置为"无限滚动"。它通过比较滚动完成后列表中的项目数和数据库中的项目数(onScroll来自OnScrollListener)来实现此目的

    public void onScroll(AbsListView view, int firstVisibleItem,
                                 int visibleItemCount, int totalItemCount) {

                if(firstVisibleItem+visibleItemCount == totalItemCount && totalItemCount!=0)
                {
                    ListView listView = (ListView) findViewById(R.id.my_list);

                    long numberOfItemsInDB = DatabaseUtils.queryNumEntries(db, "MYTABLE");
                    long numberOfItemsInList = listView.getAdapter().getCount();
                    long difference = numberOfItemsInDB - numberOfItemsInList;

                    if (difference > 0) {
                    ... //do stuff here 
                    }

这很有效。但有时列表可能会填充自定义光标中的项目(例如来自搜索过滤),因此我需要该光标的项目计数。我可以使用.getCount()来获得一致的计数,但如果我已经使用了LIMIT,那么它将只返回我所拥有的LIMIT。

如何获取光标中忽略限制的项目数?

1 个答案:

答案 0 :(得分:0)

使用以下方法获取表格中的行数。

public synchronized long getRowCount(String TABLE_NAME) {
    SQLiteDatabase db = this.getReadableDatabase();
    return DatabaseUtils.queryNumEntries(db, TABLE_NAME);
}

使用where子句

获取表行计数
public synchronized long getRowCount(String TABLE_NAME) {
    SQLiteDatabase db = this.getReadableDatabase();
    return DatabaseUtils.queryNumEntries(db, TABLE_NAME, "NAME like ?", new String[]{"%D%"})
}