2

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

我刚开始使用 Content Providers,我不太了解它们是如何工作的,但是正如我在谷歌上看到的那样,我需要定义表的名称及其主键:

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

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

谢谢!

4

1 回答 1

1

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

您不需要使用 aContentProvider将数据库与服务器同步。

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

不轻易。引用文档

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

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

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

于 2012-06-18T16:11:28.400 回答