如何在BaseColumns中使用_COUNT

时间:2016-08-11 21:06:35

标签: android sqlite android-sqlite

我一直在阅读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:没有这样的列:_count(代码1):,同时编译:SELECT _count FROM subject

我应该如何使用_COUNT

1 个答案:

答案 0 :(得分: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