Android架构:使用多个ContentProviders和onUpgrade事件

时间:2011-05-20 13:30:34

标签: android upgrade android-contentprovider sqliteopenhelper

我的应用程序有两个数据库表:ProductsShoppingCard。所以我创建了ProductContentProviderShoppingCardContentProvider。每个ContentProvider在其onCreate()方法中调用一个属于SQLiteOpenHelper的私有类。

  1. 从我的观点来看,我会在分隔 ConfigBean 中创建一个全局静态变量DATABASE_VERSION,负责 both < / strong>内容提供商。所以,如果我更新所有表都更新 =&GT;这不起作用。只是onUpdate事件永远不会被触发。

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

  3. 如果您在每个内容提供商中指定DATABASE_VERSION,但每个内容提供商中的相等版本号。
    =&GT;这很有效。

  4. 问题:

    为什么不能将DATABASE_VERSION外部的公共静态变量设置为全局处理升级,还是我的架构完全错误?

2 个答案:

答案 0 :(得分:1)

我的问题的解决方案是为两个内容提供商创建基类。此类包含SQLiteOpenHelper的唯一实例。这还可确保创建所有数据库表。 我在Ali Serghini, November 5th, 2010的帖子中找到了这些信息。

答案 1 :(得分:0)

好的,我找到了这种奇怪行为的原因:

如果您有多个ContentProviders,我认为将DATABASE_VERSION作为外部参数的方法是正确的。

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

在引用所有ContentProviders中的单个参数后,一切都按预期工作。

非常感谢, 塞巴斯蒂安