2011-02-25 50 views
1

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

回答

3

答案是,你不必。假设你使用SQLiteOpenHelper来实现你的数据库,你有两个替代:

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

这些几乎足以应付所有的问题。当你创建你的openhelper时,你需要为它提供'required'数据库版本。它会自动检测设备,不管它以前是否有你的应用程序的数据库。所以,会有三种可能的情况:

  1. 没有DB是找到(最有可能这是一个干净的安装您的应用程序)=>调用的onCreate()
  2. DB是发现和匹配版本=>没有的上述倍率叫
  3. DB是发现,但版本比期望一个较低的(假设你需要更改数据库结构更新应用程式后)=>调用onUpgrade()

在你的情况下,更新自己的应用,但db的结构不需要改变,(2)会发生,db和数据将会保留。

+0

这是一个很好的建议。现在我有一件事要专心。谢谢! – twittfort 2011-02-25 11:01:41

0

查看Android Developers网站上的NotePadProvider.java示例。基本上,无论何时更新数据库版本,都会在SQLOpenHelper类中调用onUpgrade方法。将您正在查找的逻辑插入该方法。