首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >数据库的ORMLite更新

数据库的ORMLite更新
EN

Stack Overflow用户
提问于 2012-12-09 05:24:25
回答 4查看 20.5K关注 0票数 17

我实际上正在开发一个使用ORMLite库的应用程序(顺便说一句,这很棒),但我是使用它的初学者。

我有一个关于设备内部数据库更新的问题。

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

当这个人在更新应用程序时,我如何才能用我的新条目更新数据库,并将旧条目保留在其中。

更清楚地说,假设用户在我的应用程序中回答了问题。当我将引入新的问题时,我如何在他更新我的应用程序时将它们插入到数据库中,并保持已经回答的问题

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-06-06 01:50:55

当这个人更新应用程序时,我如何才能用我的新条目更新数据库,并将旧条目保留在其中。

其思想是使用传递给onUpgrade(...)方法的版本号。对于ORMLiteOrmLiteSqliteOpenHelper.onUpgrade(...)方法接受oldVersionnewVersion编号。然后,您可以将转换代码编写到您的应用程序中,以便能够从旧格式转换数据并更新架构。

有关详细信息,请参阅ORMLite docs on upgrading your schema

引用一下,你可以这样做:

代码语言:javascript
复制
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;");
}

如果您有需要转换的现有数据,则应尽可能使用SQL进行转换。

另一种选择是让一个Account实体和一个OldAccount实体指向相同的表名。然后,您可以使用oldAccountDao读入OldAccount实体,将它们转换为Account实体,然后使用accountDao将它们更新回同一个表。你需要小心这里的对象缓存。

票数 34
EN

Stack Overflow用户

发布于 2013-11-24 09:32:16

我这样做:

代码语言:javascript
复制
@Override
public void onUpgrade(SQLiteDatabase database, ConnectionSource connectionSource, int oldVersion, int newVersion) {

    switch (oldVersion) {
    case 1:
        updateFromVersion1(database, connectionSource, oldVersion, newVersion);
        break;
    case 2:
        updateFromVersion2(database, connectionSource, oldVersion, newVersion);
        break;
    default:
        // no updates needed
        break;
    }

}

private void updateFromVersion1(SQLiteDatabase database, ConnectionSource connectionSource, int oldVersion, int newVersion) {
    // do some stuff here
    onUpgrade(database, connectionSource, oldVersion + 1, newVersion);
}

private void updateFromVersion2(SQLiteDatabase database, ConnectionSource connectionSource, int oldVersion, int newVersion) {
    // do some stuff here
    onUpgrade(database, connectionSource, oldVersion + 1, newVersion);
}

这将独立于他将要到来的db版本来递增地更新用户db。

票数 8
EN

Stack Overflow用户

发布于 2012-12-09 06:35:39

资料不多,不清楚你的表结构是否有变化。

a)如果不更改数据库结构,则为

1在新版本的程序中,当您开始用当前版本(参见PackageManager.getPackageInfo)检查以前保存的版本(例如,在首选项中)时

saved =0-用户刚刚安装了新版本

已保存<当前-用户更新程序

2将新数据添加到基础中

3在首选项上保存当前版本

b)如果表结构已更改(添加或删除字段),则为

1增加数据库的版本号(请参阅extends类)

2当用户第一次运行你的程序时,方法'onUpgrade‘将被调用(在你的扩展OrmLiteSqliteOpenHelper类中),它将被转换为旧的和新的版本号。

  • 读取缓存中的现有数据(临时)
  • 重新创建表
  • 添加缓存中的数据+您的新data
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13782084

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档