如何使用 SQLite 在 Android 中获取查询的行数?

Posted

技术标签:

【中文标题】如何使用 SQLite 在 Android 中获取查询的行数?【英文标题】:How to get the row count of a query in Android using SQLite? 【发布时间】:2011-09-15 03:33:18 【问题描述】:

看来我下面的方法不起作用。

public int getFragmentCountByMixId(int mixId) 
    int count = 0;
    SQLiteDatabase db = dbOpenHelper.getWritableDatabase();

    Cursor cursor = db.rawQuery(
        "select count(*) from downloadedFragement where mixId=?",
        new String[]String.valueOf(mixId));
    while(cursor.moveToFirst())
        count = cursor.getInt(0);
    
    return count;
    

【问题讨论】:

与问题无关:您不能通过无限期地调用“moveToFirst”来迭代游标。您应该调用一次,然后使用 while(cursor.moveToNext()) ... 【参考方案1】:
val query = "SELECT * FROM $TABLE_NAME ;"
val result = db.rawQuery(query,null)
Toast.makeText(ctx,result.count,Toast.LENGTH_SHORT).show()

【讨论】:

【参考方案2】:
 public long getRecords() 
    return DatabaseUtils.longForQuery(db, "SELECT COUNT(*) FROM contacts", null);

如果您的数据库使用自动增量,您可以使用它作为方法或使用它

 public long getRecords() 
    return DatabaseUtils.longForQuery(db, "SELECT seq FROM sqlite_sequence", null);

【讨论】:

【参考方案3】:

DatabaseUtils

public static long queryNumEntries(SQLiteDatabase db, String table)

【讨论】:

如果它是一个没有数据库名称的内存数据库怎么办? “DatabaseUtils.queryNumEntries”仍然是一个不错的选择还是已被弃用?【参考方案4】:

这会更有效,因为适用于所有版本:

int numRows = DatabaseUtils.longForQuery(db, "SELECT COUNT(*) FROM table_name", null);

int numRows = DatabaseUtils.queryNumEntries(db, "table_name");

如果您想获取特定选择的行数,那么您应该使用(在API 11中添加)

public static long queryNumEntries (SQLiteDatabase db, String table, String selection)

谢谢:)

【讨论】:

在第一个示例中,您使用 longForQuery()。我认为该方法仅返回第一行第一列中的值。那么这将如何显示数据库中的总行数?是不是因为查询 SELECT COUNT(*) 是在整个数据库上运行的?【参考方案5】:
cursor.moveToNext();
cursor.getCount();

如果没有调用moveToNext(),可能会出现cursorIndexOutOfBoundException。

【讨论】:

【参考方案6】:

使用 String 代替 int

String strCount = "";
int count = 0;
SQLiteDatabase db = dbOpenHelper.getWritableDatabase();

Cursor cursor = db.rawQuery(
    "select count(*) from downloadedFragement where mixId=?",
    new String[]String.valueOf(mixId));

while(cursor.moveToFirst())
    strCount = cursor.getString(cursor.getColumnIndex("COUNT(*)"));

count = Integer.valueOf(strCount).intValue();

【讨论】:

【参考方案7】:

Cursor.getCount()

【讨论】:

我不知道这将如何与您当前的实现一起工作,但如果您只是将 count(*) 更改为 *,这应该可以工作。 我认为最好的解决方案return (int) DatabaseUtils.longForQuery(mDB, "SELECT COUNT(*) FROM table_name", null); 对于有 1 行的游标,这将返回 0。【参考方案8】:

查询表中的_ID 列,然后在游标上调用getCount。这是link 我在我的一个项目中做的。查看第 110 行。

【讨论】:

以上是关于如何使用 SQLite 在 Android 中获取查询的行数?的主要内容,如果未能解决你的问题,请参考以下文章

如何从mysql中获取数据并存储在android的Sqlite数据库中

Android Sqlite:如何从 Listview 中获取 SQLite rowId?

如何使用游标从sqlite android中的多个列中获取数据

如何在android中使用游标(sqlite查询)搜索数据库

如何在 Android Studio 上获取 Sqlite 数据库中插入数据的实时视图

Android 从 Sqlite 数据库保存和获取图像