3

根据我之前提出的问题(请参阅this),如果我在分发应用程序后进行更改并添加新数据,那么删除和重新创建表将不会很好地工作,因为用户将失去他们所有的数据。

是否有处理此问题的推荐策略和/或您是否有一些示例说明我必须采取哪些措施来管理此问题?

谢谢

编辑 :

会是这样的

@Override
    public void onUpgrade (SQLiteDatabase db, ConnectionSource connectionSource, int oldVersion, int newVersion){
        // TODO Auto-generated method stub
            //This is why I'm currently trying
        while(oldVersion < newVersion){
            switch(oldVersion){
            case 2:
                //add new datas from version 2 here
                break;
            case 3:
                //add new datas from version 3 here
                break;
            default:
                break;
            }
            oldVersion++;
        }
            /*
        try {
            Log.i(DatabaseHelper.class.getName(), "onUpgrade");
            TableUtils.dropTable(connectionSource, Category.class, true);
            TableUtils.dropTable(connectionSource, Level.class, true);
            TableUtils.dropTable(connectionSource, Hint.class, true);
            TableUtils.dropTable(connectionSource, HintCount.class, true);
            TableUtils.dropTable(connectionSource, Question.class, true);
            // after we drop the old databases, we create the new ones
            onCreate(db, connectionSource);
        } catch (SQLException e) {
            Log.e(DatabaseHelper.class.getName(), "Can't drop databases", e);
            throw new RuntimeException(e);
        }
            */
    }
4

1 回答 1

2

如果您只担心新数据,而不是模式修改,您可以尝试createIfNotExistsORM lite 中的方法。所以基本上每次升级你都会尝试插入所有数据。但只会插入新数据。

编辑:
另一种方法可能如下:将所有对象拆分为组,例如:初始对象、第一个升级对象、第二个升级对象等等。

onCreate您将创建所有对象,迭代所有组。onUpgrade您将根据当前版本使用组。

于 2012-12-11T16:20:48.110 回答