实现Content Provider:复合主键

时间:2012-06-18 15:40:03

标签: android android-contentprovider

我正在实现自己的内容提供程序,因为我要将数据库与服务器同步。我的数据存储在SQLiteDatabase中,我的一些表有一个复合主键(2列,每列一个是另一个表的外键)。

我刚刚开始与内容提供商合作,我不知道他们是如何工作的,但是我可以看到谷歌搜索,我需要定义表名及其主键:

uriMatcher.addURI(PROVIDER_NAME, "books", BOOKS);
uriMatcher.addURI(PROVIDER_NAME, "books/#", BOOK_ID);

据我了解,如果我使用URI ... / books / 1,它将使用主键“1”访问Book。问题是,它是否适用于复合主键?如果是,URI将如何?

谢谢!

1 个答案:

答案 0 :(得分:1)

  

我正在实现自己的内容提供程序,因为我要将数据库与服务器同步。

您无需使用ContentProvider将数据库与服务器同步。

  

问题是,它是否适用于复合主键?

不容易。引用the docs

  

表数据应始终具有“主键”列,提供者将其保留为每行的唯一数值。

您可以添加一个单独的列(通常名为_id),用于ContentProvider作为主键。如果您使用AUTOINCREMENT列,则无需自行分配值,这意味着您可以在几乎所有方面忽略此列,除非ContentProvider需要实例Uri

欢迎您尝试避免这种情况,并使用Uri或类似的content://your.authority.goes.here/table/key1/key2。但是,它不适用于CursorAdapter,框架中的其他各个位置可能会采用数字ID模式。