我似乎用戶數據庫,以瞭解如何在數據庫中https://github.com/jgilfelt/android-sqlite-asset-helper安卓升級使用SQLiteAssetHelper
閱讀文檔我要保留用戶數據,只有一張桌子後升級。我不需要改變任何表格。升級幾乎是在另一個表中添加新行。
所以流量(我猜)是:
onUpgrade:
1)從表中獲取用戶定義數據的ArrayList 1
2)更新數據庫
3)把用戶數據備份進入表1
我在想這個全錯嗎?
任何提示將不勝感激。
我似乎用戶數據庫,以瞭解如何在數據庫中https://github.com/jgilfelt/android-sqlite-asset-helper安卓升級使用SQLiteAssetHelper
閱讀文檔我要保留用戶數據,只有一張桌子後升級。我不需要改變任何表格。升級幾乎是在另一個表中添加新行。
所以流量(我猜)是:
onUpgrade:
1)從表中獲取用戶定義數據的ArrayList 1
2)更新數據庫
3)把用戶數據備份進入表1
我在想這個全錯嗎?
任何提示將不勝感激。
我誤解了更新腳本的要點。
當你的應用程序更新時,它不會安裝新的數據庫。它會保留你的舊版本,並且只運行更新腳本以使你的舊版本升級。
所以,如果你不需要改變你的用戶數據,它不會丟失。它只會在腳本中運行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";
我想只保留一個表中的用戶數據。我不需要改變任何表格。升級幾乎是在另一個表中添加新行。
如果你只是想添加一些行,那麼就加入他們的onUpdate。
有,我發現了一個更簡單的方法。在使用Firefox SQLite Manager更新main/assets/databases文件夾中的數據庫之後,只需先刪除以前的數據庫,然後再創建代碼爲的數據庫,然後將數據庫重新發送到應用程序。 船舶:click,
要刪除:
this.deleteDatabase("<yourdatabasename>");
例如;
this.deleteDatabase("db.db");
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
我確實認爲,但它是一對夫婦一千行,以及如果用戶錯過這個升級和升級到版本3。我想知道如何在其他情況下,表保留用戶數據。 – Fuzz
另外.. onUpdate由SQLiteAssetHelper使用,如果覆蓋它,它並沒有它的魔力。 – Fuzz