Android:使用SQLiteAssetHelper升级用户数据库

时间:2014-03-06 09:10:28

标签: android android-sqlite

在阅读https://github.com/jgilfelt/android-sqlite-asset-helper

上的文档后,我似乎无法理解如何升级数据库

我想将用户数据仅保留在一个表中。我不需要改变任何表格。升级几乎是在另一个表中添加新行。

所以流程(我猜)是:

onUpgrade:
1)从表1中获取用户定义数据的ArrayList 2)更新数据库
3)将用户数据放回表1

我是否认为这一切都错了?
任何提示将不胜感激。

4 个答案:

答案 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) {
}
相关问题