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