Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.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
如何使用ORMLite在android应用程序中更改数据库中的表并保留值_Android_Database_Sqlite_Ormlite - Fatal编程技术网

如何使用ORMLite在android应用程序中更改数据库中的表并保留值

如何使用ORMLite在android应用程序中更改数据库中的表并保留值,android,database,sqlite,ormlite,Android,Database,Sqlite,Ormlite,我想在我的android应用程序中修改一个使用ORMLite的表。我会解释我的情况 假设有人在Google Play上下载了我的应用程序。几个月后,我肯定会用新条目填充一些表 当这个人正在更新应用程序时,我怎么能用我的新条目更改数据库中的表,并将旧条目保留在其中呢 更清楚地说,假设用户表被修改了,我引入了一个新字段“city”,如何用旧值更新表 当我试图用属性为“city”的新DAO对象从旧表(没有“city”字段)备份数据时,我无法获取数据 感谢我们的想法是使用传递给onUpgrade(…)方

我想在我的android应用程序中修改一个使用ORMLite的表。我会解释我的情况

假设有人在Google Play上下载了我的应用程序。几个月后,我肯定会用新条目填充一些表

当这个人正在更新应用程序时,我怎么能用我的新条目更改数据库中的表,并将旧条目保留在其中呢

更清楚地说,假设用户表被修改了,我引入了一个新字段“city”,如何用旧值更新表

当我试图用属性为“city”的新DAO对象从旧表(没有“city”字段)备份数据时,我无法获取数据


感谢

我们的想法是使用传递给onUpgrade(…)方法的版本号。对于ORMLite,OrmLiteSqliteOpenHelper.onUpgrade(…)方法采用旧版本号和新版本号。然后,您可以将转换代码写入应用程序,该应用程序能够从旧格式转换数据并更新模式

有关更多详细信息,请访问文档

最有可能的情况是,您应该根据要升级的版本对架构进行有条件的更改:

if (oldVersion < 2) {
  // we added the age column in version 2
  dao.executeRaw("ALTER TABLE `account` ADD COLUMN age INTEGER;");
}
if (oldVersion < 3) {
  // we added the weight column in version 3
  dao.executeRaw("ALTER TABLE `account` ADD COLUMN weight INTEGER;");
}
if(旧版本<2){
//我们在版本2中添加了年龄列
executeRaw(“ALTER TABLE`account`ADD COLUMN age INTEGER;”);
}
如果(旧版本<3){
//我们在版本3中添加了权重列
executeRaw(“ALTER TABLE`account`ADD COLUMN weight INTEGER;”);
}

思想是使用传递给onUpgrade(…)方法的版本号。对于ORMLite,OrmLiteSqliteOpenHelper.onUpgrade(…)方法采用旧版本号和新版本号。然后,您可以将转换代码写入应用程序,该应用程序能够从旧格式转换数据并更新模式

有关更多详细信息,请访问文档

最有可能的情况是,您应该根据要升级的版本对架构进行有条件的更改:

if (oldVersion < 2) {
  // we added the age column in version 2
  dao.executeRaw("ALTER TABLE `account` ADD COLUMN age INTEGER;");
}
if (oldVersion < 3) {
  // we added the weight column in version 3
  dao.executeRaw("ALTER TABLE `account` ADD COLUMN weight INTEGER;");
}
if(旧版本<2){
//我们在版本2中添加了年龄列
executeRaw(“ALTER TABLE`account`ADD COLUMN age INTEGER;”);
}
如果(旧版本<3){
//我们在版本3中添加了权重列
executeRaw(“ALTER TABLE`account`ADD COLUMN weight INTEGER;”);
}

我尝试了这一点,但我现在遇到了一个异常-java.sql.SQLException:Android sqlite游标中的未知字段“city”,请解释该场景。从例外情况来看,很明显城市字段不存在。这是正确答案,应该接受。太糟糕了,OP不知道如何使用StackOverflow。这是唯一的方法吗?这似乎对更改表的支持率很低。您必须手动查找正在使用的数据库版本,然后应用更改。。。真的很糟糕,我试过了,但是我现在遇到了一个异常-java.sql.SQLException:来自Android sqlite游标的未知字段'city',请解释这个场景。从例外情况来看,很明显城市字段不存在。这是正确答案,应该接受。太糟糕了,OP不知道如何使用StackOverflow。这是唯一的方法吗?这似乎对更改表的支持率很低。您必须手动查找正在使用的数据库版本,然后应用更改。。。真糟糕