0

编辑:我的数据库有 2 个表。一张表是更新后需要保存和恢复的用户数据。另一个表是常量数据,每次更新时都会从 assets 文件夹中加载。

因此,当我升级数据库时,我首先将表一保存到外部数据库。然后我用“常量”表覆盖数据库copyDataBase();,然后将保存的表复制回来。

在我复制数据库之前,我需要关闭它,否则数据很奇怪。我总是得到一个

close() was never explicitly called on database '/data/data/com.myproject/databases/mdb.sqlite' 

调用 openOrCreateDatabase 的位置。这很奇怪,因为我之前打电话给 close 。我能做些什么?

public void onUpgrade(SQLiteDatabase db,
        int oldVersion, int newVersion) {

//save db tables to other db ...

db.close(); 
copyDataBase();
db = SQLiteDatabase.openOrCreateDatabase(databaseFile, null);

//... save back to db
}

谢谢欧里博尔

4

1 回答 1

0

我强烈建议在执行时不要关闭打开的数据库onUpgrade。你正在干扰一个明智的行动,这会造成很多麻烦!

您应该考虑其他机制来确定数据库是否已升级并进行备份/复制。

编辑

如果你只想替换 assets 文件夹中的一张表,为什么不直接复制 sdcard 上的数据库,打开连接,将内部的表内容替换为 assets 数据库中的表内容?这可以在 onUpgrade 中完成,而无需关闭内部数据库。

您不应该仅仅为了替换/更新单个表而复制数据库文件。

于 2012-11-29T14:57:42.907 回答