在Android应用中更新静态数据库

时间:2012-11-14 16:38:48

标签: android sqlite upgrade

我有一个应用程序,我需要更新数据库的新数据。没有其他更新,没有架构更改,没有代码更改。我想要做的就是将一些行添加到用户无法修改的数据库中。

通常在首次安装时,我会从assets/复制数据库。之后,当程序运行时,我检查/data/data/my.package/databases中是否存在DB文件,如果存在,我不再复制。

现在,新版本的应用程序将保持完整的数据库,我想为那些拥有旧版本的人添加新行。我有几个选择:

  • 使用onUpgrade()的{​​{1}}功能插入行。我不想这样做,因为有很多行,我宁愿把它们放在要导入的SQLiteOpenHelper文件夹中。有没有办法从assets/内访问assets/
  • 每次启动时删除并重新创建数据库。这很浪费,但无论安装了以前版本的应用程序,它都能确保完整的数据库存在。
  • 检查已安装的应用程序的先前版本,并在首次启动时有选择地删除数据库,以便仅在首次启动时从onUpgrade()复制新行。为此,我无法弄清楚应该检查什么。运行时无法知道旧的应用程序版本。我想过使用assets/PackageInfo.firstInstallTime并检查一个时间,如果用户在此之前安装/更新,那么他们显然有我正在寻找的第一个版本。我知道这很容易出错,但我现在已经把这个应用程序从市场上撤下了,所以我有一些余地。

另一种表达这个问题的方法是:如果我正在升级应用程序并且我在PackageInfo.lastUpdateTime中有一些文件要么删除或更新,那么根据版本更改,我该如何实现因为我不知道以前的版本安装了什么?

1 个答案:

答案 0 :(得分:0)

onUpgrade回调会告诉您旧版本和新版本。