0

我的应用程序有两个数据库表:ProductsShoppingCard. 所以我创建了一个ProductContentProviderand ShoppingCardContentProvider。每个都ContentProvider在其方法中调用onCreate()一个私有类,该类是SQLiteOpenHelper.

  1. 从我的角度来看,我会DATABASE_VERSION在一个单独的 ConfigBean中创建一个全局静态变量,该变量负责两个内容提供者。因此,如果我更新所有表都已更新。
    => 那行不通。只是永远不会触发 onUpdate 事件。

  2. 如果您在每个内容提供者中指定 a DATABASE_VERSION,但在每个内容提供者中使用不同的版本号
    => 那不起作用。从我的角度来看,这也没有任何意义,因为 in 的参数SQLiteOpenHelper被称为DATABASE_VERSION not TABLE_VERSION。因此,换句话说,如果不对所有onUpgrade侦听器更新/抛出事件,您将无法更新任何表。

  3. 如果您在每个内容提供者中指定 a DATABASE_VERSION,但在每个内容提供者中使用相同的版本号。
    => 那行得通。

问题:

为什么你不能在DATABASE_VERSION外部创建一个公共静态变量来处理全局升级,或者我的架构完全走错了路?

4

2 回答 2

1

我的问题的解决方案是为两个内容提供者创建一个基类。此类包含 SQLiteOpenHelper 的唯一实例。这也确保创建了所有数据库表。我在2010 年 11 月 5 日 Ali Serghini的帖子中找到了此信息。

于 2011-05-26T08:02:55.987 回答
0

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

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

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

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

无论如何,谢谢,塞巴斯蒂安

于 2011-05-24T13:08:54.610 回答