我的应用程序有两个数据库表:Products
和ShoppingCard
。所以我创建了ProductContentProvider
和ShoppingCardContentProvider
。每个ContentProvider
在其onCreate()
方法中调用一个属于SQLiteOpenHelper
的私有类。
从我的观点来看,我会在分隔 ConfigBean 中创建一个全局静态变量DATABASE_VERSION
,负责 both < / strong>内容提供商。所以,如果我更新所有表都更新
=&GT;这不起作用。只是onUpdate事件永远不会被触发。
如果您在每个内容提供商中指定DATABASE_VERSION
,但每个内容提供商中的不同版本号
=&GT;这不起作用。从我的角度来看,这也没有意义,因为SQLiteOpenHelper
中的参数被称为DATABASE_VERSION
而不是 TABLE_VERSION
。换句话说,如果不在所有 onUpgrade 侦听器上更新/抛出事件,则无法更新任何表。
如果您在每个内容提供商中指定DATABASE_VERSION
,但每个内容提供商中的相等版本号。
=&GT;这很有效。
问题:
为什么不能将DATABASE_VERSION
外部的公共静态变量设置为全局处理升级,还是我的架构完全错误?
答案 0 :(得分:1)
我的问题的解决方案是为两个内容提供商创建基类。此类包含SQLiteOpenHelper的唯一实例。这还可确保创建所有数据库表。 我在Ali Serghini, November 5th, 2010的帖子中找到了这些信息。
答案 1 :(得分:0)
好的,我找到了这种奇怪行为的原因:
如果您有多个ContentProviders,我认为将DATABASE_VERSION作为外部参数的方法是正确的。
我忘记了还有另一个ContentProvider:一个简单的ConfigTable来存储设置。我想我最终会混合使用不同的DATABASE_VERSION值,这会导致在每次启动时重新创建数据库。
在引用所有ContentProviders中的单个参数后,一切都按预期工作。
非常感谢, 塞巴斯蒂安