【问题标题】:What is the use of BaseColumns in AndroidAndroid中BaseColumns有什么用
【发布时间】:2011-12-15 12:43:00
【问题描述】:

在 Android 中从BaseColumns 实现一个类有什么用?

【问题讨论】:

    标签: java android database sqlite


    【解决方案1】:

    BaseColumns 接口为非常常见的_ID_COUNT 列提供名称。

    使用通用名称使 Android 平台(以及开发人员)能够以统一的方式处理任何数据项,而不管其整体结构(即其他非 ID 列)如何。为接口/类中的常用字符串定义常量可避免代码中的重复和拼写错误。

    CursorAdapter 需要使用名为 _id 的列(BaseColumns._ID 的常量值)、ContentProvider 的实现以及将Cursor 交给 Android 平台执行操作的其他地方为你。例如,ListView 的适配器使用_ID 列为您提供在OnItemClickListener.onItemClick() 中单击的列表项的唯一 ID,而不必每次都明确指定您的 ID 列。

    是否实现仅由常量组成的接口或引用它们的全名,即BaseColumns._ID,这是个人喜好问题。我个人更喜欢后者,因为_ID 的来源更明显,而前者感觉像是滥用继承。

    【讨论】:

    • thnx 所以这意味着我们不必获取 table 的 id (即主键),它的 autmaticaly 可从 BaseColumns._ID 获得
    • 您仍然需要在 SELECT 查询中获取 ID 列,BaseColumns._ID 只定义了该 ID 列的 name
    • BaseColumns._ID的值,即字符串"_id"主ID列的名称;如果要与CusorAdapterContentProviderListView 等一起使用,主 ID 列不能有任何其他名称。
    • 好的,但是 _COUNT 是什么意思,'目录中的行数'?
    • @Maarten “每个提供者还可以将返回的记录数报告为 _COUNT 列;它的值对于所有行都是相同的。”来自linuxtopia.org/online_books/android/devguide/guide/topics/… 的“查询返回的内容”部分
    【解决方案2】:

    这是一个简单的界面,添加了两个字段:

    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 很好地匹配

    【讨论】:

      【解决方案3】:

      BaseColumn 接口仅提供列名称 _ID 和_COUNT。您仍然必须指定在构建表时使用它们的列。例如,要使用列名 _ID 创建列,您可以执行以下操作:

      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)";
      

      【讨论】:

        【解决方案4】:

        它是一个界面,看起来像这样

        public interface BaseColumns
        {
        
            public static final String _ID = "_id";
        
        
            public static final String _COUNT = "_count";
        }
        

        它包含 id 和 count 等常量,用于 SQL lite DB 中的自动增量。

        我们也可以为 id 创建自己的常量,而无需使用这个特定的接口。但是像游标适配器这样的函数需要像“_id”这样的精确常量,所以最好使用提供的接口!!

        希望对您有所帮助!! :-)

        【讨论】:

          猜你喜欢
          • 2013-01-17
          • 2011-10-11
          • 1970-01-01
          • 1970-01-01
          • 2011-12-31
          • 1970-01-01
          • 2011-03-29
          • 2020-08-21
          • 1970-01-01
          相关资源
          最近更新 更多