我有一个在Play商店上线的应用程序。它带有一个预装数据库,它捆绑在assets文件夹中,当用户最初启动应用程序时,db被复制到首选文件夹。
有一个收藏夹表,用户可在其中存储书签/收藏记录。
我有新数据和我用捆绑数据库做的其他一些修改,并且会将新APK上传到Play商店。
我担心的是,正在使用我的应用程序的用户,他们将获得更新通知,一旦他们更新,他们的应用程序将使用新的捆绑数据库,他们将丢失存储在收藏夹中的记录。
我做了一些谷歌搜索,当我们在运行时创建数据库时,SQLiteHelper onUpgrade()工作,但在我的情况下,它是预先加载的捆绑数据库。
如何在更新前备份收藏夹数据,然后将其加载回新的db文件中。
由于
答案 0 :(得分:4)
在较新的版本中,您应该保留要保留的表数据。为此,您可以:
SQLiteDatabase
个对象,每个数据库文件对应一个。对于第4步,您甚至不需要专门编写代码,可以对每个表进行编码,例如或多或少这样(警告,此代码未经测试):
static void copyTable(SQLiteDatabase source, SQLiteDatabase destination, String tableName)
{
Cursor c = source.query(tableName, null, null, null, null, null, null);
destination.beginTransaction();
try
{
String[] columns = c.getColumnNames();
ContentValues insertValues = new ContentValues();
while (c.moveToNext())
{
insertValues.clear();
for (int i = 0; i < columns.length; i++)
insertValues.put(columns[i], c.getString(i));
destination.insert(tableName, null, insertValues);
}
destination.setTransactionSuccessful();
}
finally
{
destination.endTransaction();
}
c.close();
}