我一直在阅读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
?
答案 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。