如何使用预填充的 sqlite 数据库发布 phonegap 3.5 应用程序

Posted

技术标签:

【中文标题】如何使用预填充的 sqlite 数据库发布 phonegap 3.5 应用程序【英文标题】:How to ship a phonegap 3.5 app with prepopulated sqlite database 【发布时间】:2014-09-23 15:58:09 【问题描述】:

我正在尝试使用 Cordova/Phonegap 3.5 构建跨平台移动应用程序。

首先,我正在尝试使用带有 android SDK 的 Eclipse 创建 Android 版本。

其中一个要求是我希望我的应用附带一些创建并预填充了一些数据的数据库表。

到目前为止,我已经尝试了各种方法,但似乎没有任何效果。

这是我到目前为止所做的:

    在 Windows 上使用 sqlite3 命令行实用程序创建了一个数据库和包含数据的表。结果,我得到了我的 mydb sqlite 数据库文件。 我已将此 db 文件放在 assets/databases 文件夹下,正如许多帖子中所建议的那样。

    我使用 github.com/jgilfelt/android-sqlite-asset-helper 创建数据库:

    公共类 MyDatabase 扩展 SQLiteAssetHelper 私有静态最终字符串 DATABASE_NAME = "database_name"; 私有静态最终 int DATABASE_VERSION = 1; 公共我的数据库(上下文上下文) 超级(上下文,DATABASE_NAME,空,DATABASE_VERSION);

    在我的主要活动中,我只是调用上面的类,以确保它被执行。这是正确的方法吗?

    在我的 html 文件中,我试图打开数据库并对其进行一些操作,如下所示:http://docs.phonegap.com/en/3.1.0/cordova_storage_storage.md.html#Storage

    根据上述文档,window.openDatabase() 函数调用应该返回现有的 sqlite 数据库并给我一个句柄以便进一步使用它。

但这似乎并没有发生。当我运行我的应用程序时,它不会在 LogCat 控制台上给我任何错误,但它也找不到我的预填充数据库。

注意事项

在 Cordova 3.5 中,我没有使用任何外部 sqlite 插件,因为它应该内置在这个版本中。这是正确的吗?

附带说明 - 如何浏览我的 Android 设备(Nexus 7 平板电脑)以实际验证数据库是否已创建?

非常感谢您的帮助。

【问题讨论】:

Cordova 使用基于浏览器的 WebSQL API,它是 sqlite,但不是原生 sqlite。您需要使用其中一个插件才能使用原生 sqlite。 感谢道森。我尝试添加以下插件 cordova plugin add github.com/brodysoft/Cordova-SQLitePlugin.git ,但它似乎仍然没有选择我的预填充数据库。 【参考方案1】:

虽然这个问题很老...认为它可能有助于有人发布我的解决方案 - 发现于 2017 年。(由于 PhoneGap 发生了变化,旧的解决方案可能不再适用或在 Android 和 Apple 应用市场上被接受。)我在这个问题上工作了很长时间 - 关于如何导入预填充数据库的问题 - 没有很多简单的解决方案。我找到了最好的——也是目前唯一的——解决方案是 LiteHelpers CORDOVA-SQLITE-EXT (https://github.com/litehelpers/cordova-sqlite-ext)

我已将此添加到我的应用程序中,并且运行良好。虽然我不得不放弃 PhoneGap - 并使用 CORDOVA - 但它对我有用。

【讨论】:

2022 年 1 月 corodva-sqlite-ext 仍然有效。还有 github.com/an-rahulpandey/cordova-plugin-dbcopy 只是复制部分,但我没有尝试过。

以上是关于如何使用预填充的 sqlite 数据库发布 phonegap 3.5 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Flutter 中使用预填充的 sqlite 数据库我的应用程序

可以将 Core Data 与不同的预填充 sqlite db 一起使用吗?

离子预填充数据库 Sqlite

ionic 4 sqlite-ext 未加载预填充的数据库

Coredata 性能——为只读数据集提供预填充的核心数据 sqlite db

sqlite3 没有第二次打开预填充的数据库