【问题标题】:SQLite Migration in AndroidAndroid 中的 SQLite 迁移
【发布时间】:2017-04-28 15:52:04
【问题描述】:

我在 Android 中使用 ORMLite,并且我有一个具有两个字符串属性的实体(每个都存储在数据库中),并且对于迁移,我的实体已更改并且 2 个字段已合并到一个列表中。我该如何处理这种迁移?

迁移前的实体:

@DatabaseTable
public class MyEntity
{
    @DatabaseField(generatedId = true)
    private int id;
    @DatabaseField
    private String att1;
    @DatabaseField
    private String att2;
}

迁移后的实体:

@DatabaseTable
public class MyEntity
{
    @DatabaseField(generatedId = true)
    private int id;
    @DatabaseField(dataType = DataType.SERIALIZABLE)
    private ArrayList<String> list;
}

我查看了数据库的结构,迁移之前 att1 和 att2 是 VARCHAR,迁移之后列表是 BLOB 类型。我正在使用扩展 OrmLiteSqliteOpenHelper 的类进行迁移,但我不知道如何在新迁移数据库的列表列中传递 att1 和 att2 的值。

【问题讨论】:

    标签: android sqlite ormlite


    【解决方案1】:

    ...迁移我的实体已更改,2 个字段已合并到列表中。我该如何处理这种迁移?

    哇,这很难做到。您将必须读取每个实体,从 att1att2 创建 list 字段,然后调用 dao.update(...) 以使用列表 BLOB 字段保存每个实体。

    类似:

     for (MyEntity entity : dao.queryForAll()) {
        List<String> list = new ArrayList<>();
        if (add1 != null) {
            list.add(add1);
        }
        if (add2 != null) {
            list.add(add2);
        }
        entity.setList(list);
        dao.update(entity);
     }
    

    【讨论】:

    • 感谢您的回答。我终于将我的private ArrayList&lt;String&gt; list; 更改为String list,就像该列表作为 VARCHAR 存储在数据库中一样,最后为了迁移,我将 att1 和 att2 用逗号分隔。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-19
    • 1970-01-01
    • 2013-10-09
    • 2016-09-06
    • 2014-03-24
    • 1970-01-01
    相关资源
    最近更新 更多