2014-03-06 55 views
4

我似乎用戶數據庫,以瞭解如何在數據庫中https://github.com/jgilfelt/android-sqlite-asset-helper安卓升級使用SQLiteAssetHelper

閱讀文檔我要保留用戶數據,只有一張桌子後升級。我不需要改變任何表格。升級幾乎是在另一個表中添加新行。

所以流量(我猜)是:

onUpgrade:
1)從表中獲取用戶定義數據的ArrayList 1
2)更新數據庫
3)把用戶數據備份進入表1

我在想這個全錯嗎?
任何提示將不勝感激。

回答

2

我誤解了更新腳本的要點。
當你的應用程序更新時,它不會安裝新的數據庫。它會保留你的舊版本,並且只運行更新腳本以使你的舊版本升級。

所以,如果你不需要改變你的用戶數據,它不會丟失。它只會在腳本中運行sql。

如果確實需要更改用戶數據表,則可以使用臨時表進行更改。

如:

-- add a FullNames column to Employees 
ALTER TABLE "Employees" RENAME TO 'Employees_ME_TMP'; 

CREATE TABLE "Employees" 
(
    "EmployeeID" int NOT NULL, 
    "LastName" varchar(20) NOT NULL, 
    "FirstName" varchar(10) NOT NULL, 
    "FullName" varchar(150), 
    PRIMARY KEY ("EmployeeID") 
); 

INSERT INTO "Employees" 
(
    "EmployeeID", 
    "LastName", 
    "FirstName", 
    "FullName" 
) 
SELECT 
    "EmployeeID", 
    "LastName", 
    "FirstName", 
    "FirstName" || ' ' || "LastName" 
FROM 
    "Employees_ME_TMP"; 

DROP TABLE "Employees_ME_TMP"; 
0

我想只保留一個表中的用戶數據。我不需要改變任何表格。升級幾乎是在另一個表中添加新行。

如果你只是想添加一些行,那麼就加入他們的onUpdate。

+0

我確實認爲,但它是一對夫婦一千行,以及如果用戶錯過這個升級和升級到版本3。我想知道如何在其他情況下,表保留用戶數據。 – Fuzz

+2

另外.. onUpdate由SQLiteAssetHelper使用,如果覆蓋它,它並沒有它的魔力。 – Fuzz

0

有,我發現了一個更簡單的方法。在使用Firefox SQLite Manager更新main/assets/databases文件夾中的數據庫之後,只需先刪除以前的數據庫,然後再創建代碼爲的數據庫,然後將數據庫重新發送到應用程序。 船舶:click
要刪除:

this.deleteDatabase("<yourdatabasename>"); 

例如;

this.deleteDatabase("db.db"); 
0
@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
}