在阅读https://github.com/jgilfelt/android-sqlite-asset-helper
上的文档后,我似乎无法理解如何升级数据库我想将用户数据仅保留在一个表中。我不需要改变任何表格。升级几乎是在另一个表中添加新行。
所以流程(我猜)是:
onUpgrade:
1)从表1中获取用户定义数据的ArrayList
2)更新数据库
3)将用户数据放回表1
我是否认为这一切都错了?
任何提示将不胜感激。
答案 0 :(得分: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";
答案 1 :(得分:0)
我想将用户数据仅保留在一个表中。我不需要改变任何表格。升级几乎是在另一个表中添加新行。
如果您只想添加一些行,那么只需将它们添加到onUpdate中即可。
答案 2 :(得分:0)
我找到了一种更简单的方法。使用Firefox SQLite Manager更新main / assets / databases文件夹中的数据库后,在代码中创建数据库之前先删除以前的数据库,然后再将数据库发送到应用程序。
发货:click,
删除:
this.deleteDatabase("<yourdatabasename>");
例如;
this.deleteDatabase("db.db");
答案 3 :(得分:0)
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}