1

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

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

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

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

表达这个问题的另一种方式是:如果我正在升级一个应用程序并且我有一些文件/data/data/my.package/*想要删除或更新,基于版本更改,我怎么能做到这一点,因为我不知道以前的版本安装了吗?

4

1 回答 1

0

onUpgrade回调告诉你旧版本和新版本。

于 2012-11-14T18:13:19.207 回答