我正在实现自己的内容提供程序,因为我要将数据库与服务器同步。我的数据存储在SQLiteDatabase中,我的一些表有一个复合主键(2列,每列一个是另一个表的外键)。
我刚刚开始与内容提供商合作,我不知道他们是如何工作的,但是我可以看到谷歌搜索,我需要定义表名及其主键:
uriMatcher.addURI(PROVIDER_NAME, "books", BOOKS);
uriMatcher.addURI(PROVIDER_NAME, "books/#", BOOK_ID);
据我了解,如果我使用URI ... / books / 1,它将使用主键“1”访问Book。问题是,它是否适用于复合主键?如果是,URI将如何?
谢谢!
答案 0 :(得分:1)
我正在实现自己的内容提供程序,因为我要将数据库与服务器同步。
您无需使用ContentProvider
将数据库与服务器同步。
问题是,它是否适用于复合主键?
不容易。引用the docs:
表数据应始终具有“主键”列,提供者将其保留为每行的唯一数值。
您可以添加一个单独的列(通常名为_id
),用于ContentProvider
作为主键。如果您使用AUTOINCREMENT
列,则无需自行分配值,这意味着您可以在几乎所有方面忽略此列,除非ContentProvider
需要实例Uri
。
欢迎您尝试避免这种情况,并使用Uri
或类似的content://your.authority.goes.here/table/key1/key2
。但是,它不适用于CursorAdapter
,框架中的其他各个位置可能会采用数字ID模式。