2

我正在探索用于教育目的的google io schedule 应用程序的源代码。我注意到一件有趣的事情。

ScheduleProvider他们使用两个id领域。例如,您可以在块表中看到他们使用 well knownBaseColumns._ID和 another BlocksColumns.BLOCK_ID column

    db.execSQL("CREATE TABLE " + Tables.BLOCKS + " ("
            + BaseColumns._ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
            + BlocksColumns.BLOCK_ID + " TEXT NOT NULL," // BlocksColumns.BLOCK_ID == "block_id"
            + BlocksColumns.BLOCK_TITLE + " TEXT NOT NULL,"
            + BlocksColumns.BLOCK_START + " INTEGER NOT NULL,"
            + BlocksColumns.BLOCK_END + " INTEGER NOT NULL,"
            + BlocksColumns.BLOCK_TYPE + " TEXT,"
            + BlocksColumns.BLOCK_SUBTITLE + " TEXT,"
            + "UNIQUE (" + BlocksColumns.BLOCK_ID + ") ON CONFLICT REPLACE)");

所以我的问题是:为什么他们需要两列id

我有一个假设。我认为他们不想拒绝标准工具,SimpleCursorAdapter所以他们创建了“_id”列。但他们也想做很多joins没有名称冲突的事情,所以他们为每个表创建了 '%table%_id' 列。我对吗?如果是这样,我还有一个问题。他们如何为每个新行生成唯一的 '%table%_id'?


编辑:

我不仅在问那些探索过这段代码的人,也问那些可能遇到过相同方案的有经验的安卓程序员。

4

0 回答 0