我正在尝试在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
表。
答案 0 :(得分:1)
摆脱beginTransaction()
和endTransaction()
,原因有三:
您不需要它们,因为您正在执行单个SQL语句。
您不需要它们,因为onUpgrade()
已经包含在交易中。
您正在回滚交易,因为您从未致电setTransactionSuccessful()
如果你删除它们,你的代码应该可行,因为我在我自己的示例项目中复制了这些结果。