Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:使用SQLiteAssetThelper升级用户数据库_Android_Android Sqlite - Fatal编程技术网

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

Android:使用SQLiteAssetThelper升级用户数据库,android,android-sqlite,Android,Android Sqlite,在阅读了网站上的文档后,我似乎不明白如何升级数据库 我只想将用户数据保存在一个表中。我不需要更改任何表格。升级相当于在另一个表中添加新行 因此,流程(我猜)将是: onUpgrade: 1) 从表1中获取用户定义数据的ArrayList 2) 更新数据库 3) 将用户数据放回表1中 我对这一切的想法都错了吗? 任何提示都将不胜感激 我只想将用户数据保存在一个表中。我不需要更改任何表格。升级相当于在另一个表中添加新行 如果您只想添加一些行,那么只需在onUpdate中添加它们 我误解了更新脚本的要

在阅读了网站上的文档后,我似乎不明白如何升级数据库

我只想将用户数据保存在一个表中。我不需要更改任何表格。升级相当于在另一个表中添加新行

因此,流程(我猜)将是:

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

我对这一切的想法都错了吗?
任何提示都将不胜感激

我只想将用户数据保存在一个表中。我不需要更改任何表格。升级相当于在另一个表中添加新行


如果您只想添加一些行,那么只需在onUpdate中添加它们

我误解了更新脚本的要点。
更新应用程序时,不会安装新数据库。它会保留旧版本,并且只运行更新脚本来更新旧版本

因此,如果您不需要更改您的用户数据,它将不会丢失。它将只在脚本中运行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";

我找到了一个更简单的方法。使用Firefox SQLite Manager更新主/assets/databases文件夹中的数据库后,只需先删除以前的数据库,然后在代码中创建数据库,然后再次将数据库发送到应用程序。 要发货:,
删除:

this.deleteDatabase("<yourdatabasename>");

我确实考虑过了,但是它是几千行,如果用户错过这个升级,升级到版本3。我想知道如何在其他实例的表中保留用户数据。。onUpdate由SQLiteAssetThelper使用,如果您覆盖它,它就不会发挥作用。
this.deleteDatabase("db.db");
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}