BaseColumns
在 Android 中实现一个类有什么用途?
BaseColumns
接口提供了非常常见的 _ID
和 _COUNT
列的名称。
使用常用名称使得 Android 平台(以及开发者)可以以统一的方式处理任何数据项,而不管其整体结构(即其他非 ID 列)。在接口/类中定义常用字符串的常量避免了代码中的重复和拼写错误。
在 CursorAdapter
、ContentProvider
的实现以及其他需要将 Cursor
移交给 Android 平台进行处理的地方,都要求使用名为 _id
(常量值为 BaseColumns._ID
)的列。例如,ListView
的适配器会使用 _ID
列,在 OnItemClickListener.onItemClick()
中返回被点击列表项的唯一 ID,而无需每次都显式指定您的 ID 列。
是否要实现只包含常量的接口或使用完整名称(即 BaseColumns._ID
)引用它们,是个人品味问题。我个人更喜欢后者,因为它更明显地表明了 _ID
是从哪里来的,而前者则感觉像滥用继承。
这是一个简单的界面,它添加了两个字段:
public interface BaseColumns
{
/**
* The unique ID for a row.
* <P>Type: INTEGER (long)</P>
*/
public static final String _ID = "_id";
/**
* The count of rows in a directory.
* <P>Type: INTEGER</P>
*/
public static final String _COUNT = "_count";
}
Android内部使用的SQLite数据库带有一个自动递增并可作为主键的_id
列,这也可以与ContentProviders
很好地映射。
public static final String CREATE_TABLE =
"CREATE TABLE IF NOT EXISTS " + TABLE_NAME + " ("
+ _ID + " INTEGER PRIMARY KEY, "
+ USERNAME + " TEXT NOT NULL, "
+ PASSWORD + " TEXT NOT NULL, "
+ EMAIL + " TEXT NOT NULL UNIQUE)";
这是一个界面,看起来像这样
public interface BaseColumns
{
public static final String _ID = "_id";
public static final String _COUNT = "_count";
}
它包含了在SQL Lite数据库中用于自增的常量,例如id和count。
我们也可以创建自己的id常量而不使用这个特定的接口。但是像cursor adaptor这样的函数需要确切的常量,如“_id”,因此最好使用提供的接口!
希望这能帮助你!:-)
SELECT
查询中获取ID列,BaseColumns._ID
仅定义了该ID列的名称。 - Philipp ReichartBaseColumns._ID
的值,即字符串"_id"
,就是主 ID 列的名称;如果您想在CusorAdapter
、ContentProvider
、ListView
等中使用,主 ID 列不能有其他任何名称。 - Philipp Reichart