如何在Android上创建SQLite数据库表的副本?

时间:2018-01-14 14:31:16

标签: android sqlite android-sqlite database-migration

我正在尝试在Android项目中创建数据库表的副本。因此,我将数据库版本从1增加到2并运行以下升级代码:

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    if (oldVersion < 2 && newVersion >= 2) {
        db.beginTransaction();
        db.execSQL("create table 'products_copy' as select * from 'products';");
        Log.d(getClass().getName(), "Migrating to version 2.");
        db.endTransaction();
    }
}

我可以从日志输出中看到迁移已经运行。然后,我使用 Android Studio的Device File Explorer 将数据库文件从设备复制到我的计算机。我还可以看到数据库文件的时间戳已更改。当我使用DB Browser for SQLite打开数据库文件时,数据库只包含原始products表 - 没有products_copy

1 个答案:

答案 0 :(得分:1)

摆脱beginTransaction()endTransaction(),原因有三:

  1. 您不需要它们,因为您正在执行单个SQL语句。

  2. 您不需要它们,因为onUpgrade()已经包含在交易中。

  3. 您正在回滚交易,因为您从未致电setTransactionSuccessful()

  4. 如果你删除它们,你的代码应该可行,因为我在我自己的示例项目中复制了这些结果。