2011-12-11 72 views
0

在android中使用sqlite數據庫的最佳方式是什麼?用於未來更新的Android數據庫方法

SQLite數據庫文件(複製它第一次進入應用環境)

OR

在代碼中創建的表(在數據庫幫助的onCreate())

我的數據庫有6個表,第一次是空的。我問這是因爲我想在未來更新我的數據庫,並希望知道最佳方法。

謝謝!

回答

6

您應該在第一次使用它時創建(在代碼中)。 Android提供應該用於它的類SQLiteOpenHelperSQLiteOpenHelper定義了以下方法:

onCreate(SQLiteDatabase db):在創建數據庫時調用,這是您可以在其中創建表和列的位置,創建視圖或觸發器的位置。

onUpgrade(SQLiteDatabse db, int oldVersion, int newVersion):如果使用的數據庫比當前版本舊,則調用。處理此升級的東西(數據遷移,表創建/刪除)

在這裏看到一個很好的教程:http://www.codeproject.com/KB/android/AndroidSQLite.aspx

+0

謝謝你的回答:)。 – Cata

0

並非專用SQLLite或Android,但我已經在Windows交易應用工作,在那裏用戶可以保存放下Xml'文件' - 即:保存其報告偏好的自定義視圖以及可以在團隊中共享的各種其他標誌。啓動時,加載用戶的配置文件並解析其文檔以自定義UI。

應用程序每3周發佈一次,並且需要現有文檔才能與新應用程序一起工作。這是一個問題,偶爾XML模式更改導致新的或刪除的字段。

我們想出的解決方案是創建一個名爲Patcher的抽象類型。每個版本可能有一個或多個DerivedPatcher類型,它們在更新後在第一次加載時運行。 Patcher將有一個抽象方法來修補XMl文檔。這意味着一個XML文檔將被載入舊模式並升級,並使用新模式保存在原地。如果發生錯誤,Patcher也會有一個回滾方法來允許展開。

可以將相同的方法應用於數據庫中的表。基本上,如果您可以創建修補程序或PatchManager以在內存中將密鑰表序列化爲XML,然後應用DB更改並將數據寫回,則可以通用,可重用的方式實現數據庫遷移。

這種方法的一個關鍵好處是它可以在部署之前在開發人員的PC上進行測試,只要您有權訪問一些示例SQLLite數據。瞭解您的用戶如何使用您的應用程序是關鍵。

2

如果您不希望通過用戶交互更新您的數據庫,那麼該文件可能是最好的選擇,尤其是在您需要插入大量數據(文件複製vs一堆插入)的情況下。另一方面,如果您希望用戶更改或添加一些數據,則該文件方法將僅在第一版中起作用。當您需要更新模式或添加新數據(發佈升級)時,您需要考慮現有的數據可能會被用戶期望在升級後發現的某些內容所改變或豐富。

因此,替換文件不再是一個選項。

如果你需要使用sqllite助手的做法,我很想聽聽你對我的幫助sqllite代碼生成一些反饋,你可以在這裏找到:github

+0

不錯的工具,謝謝! – Cata

0

對於大量數據,你可能要考慮這種解決方案:在代碼中創建一個空的數據庫,並提供一個活動,用這個動作響應意圖:android.intent.action.SEND。通過解析發送的文件並用內容填充數據庫來響應。設計可以很容易地解析(無需一切XML ;-)這樣的代碼來解析文件,並填寫數據庫是小(我二進制這包括UI顯示進度(這是的較大部分的格式活動)小於12 kB)。

該文件可能會分開分發(額外的apk,下載,無論)。這種方法的好處是,你並不需要存儲的APK中您最初的數據庫內容,因此數據(該文件已被刪除後)僅在設備上存儲一次。否則,您將擁有數據庫中的數據以及apk中的源代碼或資源。