如何将先前的数据库与新版本的sqlite数据库合并- Android

6 浏览
0 Comments

如何将先前的数据库与新版本的sqlite数据库合并- Android

我在playstore上有一个应用程序,其中包含一个数据库。

现在在新版本中,数据库已更改,添加了一个新的表。

目前我正在使用sqlite studio,并将数据库文件放在assets中,然后将其复制为应用程序数据库。请参考此示例。

我必须删除以前的数据库以复制新的数据库,或者如果我复制新的数据库(覆盖),在这两种情况下用户数据都会丢失。

也许我可以将新的表附加到当前数据库,但如果我必须在以前的数据库中的表中添加列呢?

我应该如何处理这个问题?

编辑:如果我必须复制数据库中的数据并重新插入,我如何知道当前存在于我的数据库中的表和列。

请指导我...

0
0 Comments

在Android中,如何将之前的数据库与新版本的数据库sqlite合并?

解决方法:

1. 将数据库中的所有数据获取到ArrayList或其他数据结构中,并删除旧数据库,然后创建新的数据库,并将所有数据插入到新数据库中。

2. 创建一个包含所有列的对象ArrayList,用于存储数据库中的所有表和列名。

3. 可以通过以下链接获取当前应用数据库中存在的表和列名:

表名:stackoverflow.com/questions/17185269/…

列名:stackoverflow.com/questions/2382528/…

4. 可能需要实现一个整体类来完成你想要的操作。

5. Android实际上包含了一种机制,可以帮助升级数据库版本。网页vogella.com/tutorials/AndroidSQLite/…中的第4章描述了如何使用sql。此外,你还可以通过命令INSERT INTO Destination SELECT * FROM Source;将一个表的数据复制到另一个表(临时表)中。这将把Source表中的所有数据复制到Destination表中。

0
0 Comments

问题的原因是需要将之前的数据库与新版本的数据库进行合并。解决方法是在更新方法中添加创建新表的语句,并将数据重新插入。

对于新表,只需在更新方法中添加创建表的语句。

对于新列,在一个数组中复制所有数据,重新创建表并重新插入数据。

如果需要从数据库复制数据并重新插入,如何知道当前数据库中存在的表和列。

假设在数据库的v3版本中添加了一列,在onUpgrade中,检查oldVersion的值,如果在v3之前,说明是没有这个新列的表。(对于表格也是同样的情况,将数据库的修改记录在某个地方,以了解在哪个版本中创建了这个表...)我使用一个字符串数组来存储列名(和顺序),你可以使用这个数组来存储旧的结构(每个表的每个版本一个数组,以了解表的结构)。

以下是代码示例:

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){
    if(oldVersion < LastVersionWithoutTheTable && newVersion >= LastVersionWithoutTheTable){
        db.execSQL(CREATE_THE_TABLE);
    }
}

以上是解决合并之前和新版本数据库的方法。

0