如何使用ORMLite在android应用程序中更改数据库中的表并保留值
我想在我的android应用程序中修改一个使用ORMLite的表。我会解释我的情况 假设有人在Google Play上下载了我的应用程序。几个月后,我肯定会用新条目填充一些表 当这个人正在更新应用程序时,我怎么能用我的新条目更改数据库中的表,并将旧条目保留在其中呢 更清楚地说,假设用户表被修改了,我引入了一个新字段“city”,如何用旧值更新表 当我试图用属性为“city”的新DAO对象从旧表(没有“city”字段)备份数据时,我无法获取数据如何使用ORMLite在android应用程序中更改数据库中的表并保留值,android,database,sqlite,ormlite,Android,Database,Sqlite,Ormlite,我想在我的android应用程序中修改一个使用ORMLite的表。我会解释我的情况 假设有人在Google Play上下载了我的应用程序。几个月后,我肯定会用新条目填充一些表 当这个人正在更新应用程序时,我怎么能用我的新条目更改数据库中的表,并将旧条目保留在其中呢 更清楚地说,假设用户表被修改了,我引入了一个新字段“city”,如何用旧值更新表 当我试图用属性为“city”的新DAO对象从旧表(没有“city”字段)备份数据时,我无法获取数据 感谢我们的想法是使用传递给onUpgrade(…)方
感谢我们的想法是使用传递给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。这是唯一的方法吗?这似乎对更改表的支持率很低。您必须手动查找正在使用的数据库版本,然后应用更改。。。真糟糕