仅部署一次android数据库

时间:2011-02-25 01:11:31

标签: android database sqlite

我找到了很多关于如何将SQLite数据库与Android应用程序一起部署的教程。我还发现,我无法在运行时删除assets文件夹中的文件,因为.apk已签名 现在我想每周为我的应用程序提供一个更新的数据库。我的计划是更新apk,并在市场上发布。我显然不希望将每个程序从资产文件夹开始复制到应用程序的数据库文件夹中。我尝试比较filesize以确定新数据库是否大于旧数据库。但是,如果您不添加或更改大量数据,则大小保持不变。 所以我的问题是:只有在第一次安装后或应用程序更新后才能复制数据库的智能方法是什么?

(我对Android开发很新,所以请原谅我,如果我已经监督了可能非常明显的解决方案。通常我会在提问之前找到答案。但在这里我找不到解决方案。)

2 个答案:

答案 0 :(得分:3)

答案是,你不必。假设您使用SQLiteOpenHelper来实现数据库,您有两个覆盖:

onCreate(SQLiteDatabase db);
onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion);

这些足以解决所有问题。创建openhelper时,需要向其提供“必需的”数据库版本。它会自动检测设备,无论它以前是否有您的应用程序的数据库。因此,将有三种可能的情况:

  1. 没有找到Db(很可能是你的应用程序的干净安装)=>请致电onCreate()
  2. 找到Db并匹配版本=>上述覆盖都不会调用
  3. 找到Db,但版本低于所需的版本(假设您在更新应用后需要更改数据库结构)=>调用onUpgrade()
  4. 如果您更新了应用程序,但不需要更改db的结构,则会发生(2)并且数据库和数据将保留。

答案 1 :(得分:0)

查看Android开发者网站上的NotePadProvider.java示例。基本上,只要您更新数据库版本,就会在SQLOpenHelper类中调用onUpgrade方法。将您要查找的逻辑插入到该方法中。