0

我的应用程序有两个数据库表:ProductsShoppingCard。所以我创建了ProductContentProviderShoppingCardContentProvider。每个ContentProvider在其onCreate()方法中调用SQLiteOpenHelper的孩子的私人类。Android体系结构:使用多个ContentProvider和onUpgrade事件

  1. 从我的角度来看我会做一个一个全球性的静态变量DATABASE_VERSION分离ConfigBean,负责内容提供商。所以如果我更新所有表格都会更新。
    =>这是行不通的。只是onUpdate事件永远不会被触发。

  2. 如果指定每个内容提供商DATABASE_VERSION,但在每个内容提供商不同版本号
    =>这是行不通的。从我的角度来看,这也是没有意义的,因为参数SQLiteOpenHelper被称为DATABASE_VERSION而不是TABLE_VERSION。换句话说,如果没有更新/抛出所有onUpgrade监听器上的事件,则无法更新任何表。

  3. 如果您在每个内容提供商中指定DATABASE_VERSION,但每个内容提供商中的等于版本号。
    =>这是有效的。

问:

你为什么不能让DATABASE_VERSION一个公共静态变量外globaly处理的升级,还是我完全与我的建筑在错误的道路上?

回答

0

好吧,我发现了奇怪的行为的原因:

我觉得我的做法,使DATABASE_VERSION外部参数是正确的,如果你有多个ContentProviders。

我没有忘记还有另一个ContentProvider:一个简单的ConfigTable来存储设置。我认为我最终会混合使用不同的DATABASE_VERSION值,这会导致在每次启动时重新创建数据库。

从所有ContentProviders引用一个参数后,一切都按预期工作。

还是要谢谢你, 塞巴斯蒂安

1

解决我的问题是建立一个基类到两个内容提供商。这个类拥有SQLiteOpenHelper的唯一实例。这也确保了所有数据库表的创建。 我在Ali Serghini, November 5th, 2010的帖子中发现了这个信息。

+1

尽管这可能在理论上回答这个问题,但[这将是更可取的](http://meta.stackexchange.com/q/8259)在这里包括了答案的基本部分,并提供了供参考的链接。 – 2012-05-22 18:26:00