用于未来更新的Android数据库方法

时间:2011-12-11 12:44:58

标签: android database sqlite upgrade

在android中使用sqlite数据库的最佳方法是什么?

sqlite数据库文件(首次将其复制到应用程序环境中)

在代码中创建表(在数据库助手的onCreate()中)

我的数据库有6个表,第一次是空的。我问这个是因为我希望将来更新我的数据库,并希望了解最佳方法。

谢谢!

4 个答案:

答案 0 :(得分:6)

您应该在第一次使用时创建(在代码中)。 Android提供了应该用于它的SQLiteOpenHelper类。 SQLiteOpenHelper定义了以下方法:

onCreate(SQLiteDatabase db):在创建数据库时调用,您可以在此处创建表和列,创建视图或触发器。

onUpgrade(SQLiteDatabse db, int oldVersion, int newVersion):如果使用的数据库早于当前版本,则调用。处理升级内容(数据迁移,表创建/删除)

请参阅此处获取一个好的教程:http://www.codeproject.com/KB/android/AndroidSQLite.aspx

答案 1 :(得分:2)

如果您不希望通过用户交互更新数据库,则该文件可能是最佳选择,尤其是在您要插入大量数据的情况下(文件复制与一堆插入)。 / p>

另一方面,如果您希望用户更改或添加一些数据,则文件方法仅适用于第一个版本。

每当您需要更新架构或添加新数据(发布升级)时,您都需要考虑现有数据可能会被升级后用户期望找到的某些内容更改或丰富。

因此,替换文件不再是一个选项。

如果你需要使用sqllite助手方法,我很想听听你在我的sqllite助手代码生成器上的一些反馈,你可以在这里找到:github

答案 2 :(得分:0)

不是特定于SQLLite或Android,但我已经开发了一个Windows交易应用程序,用户可以在其中保存Xml'文档' - 即:一个自定义视图,保存他们的报告首选项和各种其他标志,然后可以在团队周围共享。在启动时,加载用户的配置文件并解析其文档以自定义UI。

该应用程序将每3周发布一次,并且需要使用现有文档来处理新应用程序。这是一个问题,因为XML架构偶尔会更改,从而导致新字段或已删除字段。

我们提出的解决方案是创建一个名为Patcher的抽象类型。每个版本都可以有一个或多个DerivedPatcher类型,它们在更新后的第一次加载时运行。 Patcher将有一个抽象方法来修补XMl文档。这意味着XML文档将使用旧架构加载并升级,使用新架构保存回原位。 Patcher还有一个回滚方法,允许在发生错误时展开。

可以将相同的方法应用于数据库中的表。基本上,如果您可以创建一个修补程序或PatchManager将密钥表序列化为内存中的XML,然后应用数据库更改并将数据写回,您可以以通用,可重用的方式实现数据库迁移。

此方法的一个主要优点是可以在部署之前在开发人员PC上进行测试,只要您可以访问一些示例SQLLite数据即可。了解用户如何使用您的应用程序是关键。

答案 3 :(得分:0)

对于大量数据,您可能需要考虑这种解决方案:在代码中创建一个空数据库,并提供一个响应意图的活动:android.intent.action.SEND。通过解析发送的文件并使用内容填充数据库来响应。设计一种易于解析的格式(所有内容都不需要XML ;-)所以解析文件和填充数据库的代码很小(我的二进制文件包括显示进度的UI(这是一个较大的部分)活动)大小小于12 kB。

该文件可以单独分发(额外的apk,下载,等等)。这种方法的好处是您不需要在apk中存储初始数据库内容,因此数据只在设备上存储一次(文件被删除后)。否则,您拥有数据库中的数据以及apk中的源代码或资产。