我有一个应用程序需要更新数据库的新数据。没有其他需要更新的内容,没有架构更改,没有代码更改。我想要做的就是将一些行添加到用户无法修改的数据库中。
通常在第一次安装时,我从assets/
. 之后,当程序运行时,我检查数据库文件是否存在/data/data/my.package/databases
,如果存在,我不会第二次复制。
现在,新版本的应用程序将完整保留完整的数据库,我想为拥有旧版本的人添加新行。我有几个选择:
- 使用 的
onUpgrade()
功能SQLiteOpenHelper
插入行。我不想这样做,因为有很多行,我宁愿将它们放在assets/
要导入的文件夹中。有没有办法assets/
从内部访问onUpgrade()
? - 每次启动时删除并重新创建数据库。这很浪费,但它确保了无论安装了哪个应用程序的先前版本,都存在完整的数据库。
- 检查以查看已安装的应用程序的先前版本,并在首次启动时有选择地删除数据库,以便仅在首次启动时复制具有新行的数据库
assets/
。为此,我不太清楚我应该检查什么。运行时无法知道旧的应用程序版本。我想过使用PackageInfo.firstInstallTime
orPackageInfo.lastUpdateTime
并检查一段时间,如果用户在此之前安装/更新,那么他们显然拥有我正在寻找的第一个版本。我知道这很容易出错,但我现在已经将该应用程序从市场上撤下,所以我在这里有一些余地。
表达这个问题的另一种方式是:如果我正在升级一个应用程序并且我有一些文件/data/data/my.package/*
想要删除或更新,基于版本更改,我怎么能做到这一点,因为我不知道以前的版本安装了吗?