【问题标题】:How to use _COUNT in BaseColumns如何在 BaseColumns 中使用 _COUNT
【发布时间】:2016-08-11 21:06:35
【问题描述】:

我一直在阅读 Android 中的 BaseColumns](https://developer.android.com/reference/android/provider/BaseColumns.html) 以帮助构建我的数据库架构。

我知道_ID 是您必须自己创建的行的唯一标识符:

protected static final String SQL_CREATE = "CREATE TABLE " + TABLE_NAME + "( " + 
        _ID + " INTEGER PRIMARY KEY AUTOINCREMENT" +  ...;

我还读到_COUNT 用于引用表中的行数。

但是,当我尝试使用 _COUNT 时,出现错误。这是我尝试过的:

SQLiteDatabase db = TimetableDbHelper.getInstance(context).getReadableDatabase();
Cursor cursor = db.query(
        SubjectsSchema.TABLE_NAME,
        new String[] {SubjectsSchema._COUNT},
        null, null, null, null, null);
cursor.moveToFirst();
int count = cursor.getInt(cursor.getColumnIndex(SubjectsSchema._COUNT));
cursor.close();
return count;

我不确定这是否是正确的使用方法,但我收到了这个错误:

android.database.sqlite.SQLiteException: no such column: _count (code 1): , while compile: SELECT _count FROMsubjects

我应该如何使用_COUNT

【问题讨论】:

  • 您的 create 语句没有 _count 列。通过实现BaseColumns,您只需访问模式类中的这些值。您希望它如何映射到 SQL 创建语句中?
  • @cricket_007 我明白,但我应该如何将它添加到我的数据库中。我应该像任何其他普通列一样添加它吗?
  • 这篇文章回答了这个问题吗? stackoverflow.com/questions/6792554/…
  • 根据我的阅读,只有当你想公开一个 ContentProvider 时才需要它。我不确定当您自己添加列时会发生什么,但您可能必须在每次插入或删除时手动更新表。
  • @cricket_007 这就是我不确定的——我需要手动更新计数吗?我正准备在我的代码中尝试一下,看看会发生什么(我可能应该早点这样做)。

标签: android sqlite android-sqlite


【解决方案1】:

在数据库中,_id_count 没有什么特别之处。

当表被定义为具有此类列或查询显式计算时,您的查询将返回 _id_count 列。

Android 框架的许多对象都希望游标具有唯一的 _id 列,因此许多表都定义了它。

在大多数地方,_count 预计不会出现,因此通常不会实现。如果确实需要,可以简单地使用子查询进行计算,如下所示:

SELECT _id,
       [other fields],
       (SELECT COUNT(*) FROM MyTable) AS _count
FROM MyTable
WHERE ...

如果你想知道你自己的表的大小,你不需要使用_count这个名字;您可以执行类似SELECT COUNT(*) FROM subjects 的查询,或者更简单的是,使用为您执行此操作的helper function

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-19
    • 2011-12-15
    • 2013-01-17
    • 2010-10-02
    • 1970-01-01
    • 2011-10-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多