我正在使用 PhoneGap 和 jQueryMobile 为 iOS 和 Android 构建一个跨平台的 HTML/Javascript 应用程序,并且我正在使用本地数据库 (localdatabase/websql) 的一个表中的一些新字段(除其他外)升级我的应用程序。
挑战 我想确保当数据库使用新表字段、现有用户数据扩展时,用户数据不会被删除或锁定在无法访问的旧版本数据库中。
背景: 我的应用程序有一个用户数据的本地数据库(收入和支出,加上一些设置)。这些数据需要持久化,当我开始时,要走的路是使用 HTML5 localDatabase 功能,因为它是持久的,并且可用于 iOS 和 Android 浏览器以及大多数桌面浏览器。
我正在使用一个名为 persistenceJS 的 Javascript 插件/库/thingy 来使处理 localdb 变得更容易一些。但我的问题并不是针对persistenceJS 的。
我正在开发一个新版本的应用程序,它使用了设置表中的一些新字段。因此,当这些用户下载并运行新应用程序时,它必须测试他们的设置表是否包含该字段,如果没有,则必须创建该字段。
我该如何做这个测试?我看到了两条思路:
使用数据库标签...在 openDatabase 函数中使用。这似乎被一些开发人员用来存储版本号。我对这个选项的问题是我只知道如何使用 openDatabase 打开一个数据库(如果不存在则创建一个新数据库),并在数据库尚不存在时专门运行回调。因此,如果我在标签中指定诸如“v2”之类的内容时打开表,它会创建一个新表吗?如果是这样,它会将旧表的值复制到新表中吗?
检查表字段是否存在...我可以使用 openDatabase 然后测试表字段是否存在。如果他们没有,我可以添加它们。每次用户打开他们的应用程序时都会运行测试,这似乎有点原始。
顺便说一句:我知道 webSQL/localDb 已被霸主弃用,但它仍然是我的工具,我现在想坚持使用它。