window.openDatabase() 和 window.sqlitePlugin.openDatabase() 函数之间的区别?

2024-02-24

使用 Cordova 版本 3.x 和 Android 版本 2.x 至 4.x。

我想知道:

  1. 我的理解是否正确,所有 Android 设备默认都有一个用于创建 sqlite 数据库的 sqlite 程序/接口?
  2. 上述两个数据库函数调用是否在设备中创建了 sqlite 数据库?
  3. 如果上面的答案是no,那么上述两个函数调用创建什么类型的数据库?
  4. 如果答案是yes,那么就是window.sqlite.openDatabase()函数包装器window.openDatabase()?
  5. 调用创建的数据库是否持久?即关闭并重新打开cordova打包的应用程序后数据是否可用?
  6. 上述两种方法创建的数据库大小是否有最大限制?

  1. WebSQL http://www.w3.org/TR/webdatabase/ (window.openDatabase) 是已弃用的 Web 标准。但它在大多数桌面和移动浏览器中都可用。大多数浏览器使用 SQLite 实现该规范。在Android中,浏览器和WebViews支持WebSQL,以及第一个版本的本地存储和会话存储,以及自KitKat以来的IndexedDB。

然后,Android 独立支持从 Java API 中使用 SQLite 作为其主要持久性机制之一。

科尔多瓦很特别。该应用程序在 WebView 中运行,因此它应该使用 WebSQL,但在 Android 中,插件会覆盖 API 并将新函数植入到窗口对象中,这些新函数可能默认为不同的实现,而不是浏览器 API。

因此,在 Cordova 应用程序中,一旦加载,当您调用openDatabase您实际上是在调用 Cordova 放置在 windows 对象中的一个新函数,该函数覆盖了旧的标准函数。来自科尔多瓦文档 http://cordova.apache.org/docs/en/2.4.0/cordova_storage_storage.md.html#Storage:

一些设备已经提供了此规范的实现。对于这些设备,使用内置支持,而不是用 Cordova 的实现替换它。对于没有存储支持的设备,Cordova 的实现应该与 W3C 规范兼容。

该引用含糊不清,不再出现在文档中。对于“内置”,它们意味着 WebView 中内置的 WebSQL 支持。我链接的文档很旧,来自 2.x 版本。在这些版本中,Cordova 仅在 WebView 不支持 WebSQL(我认为这从未发生过)或者设备受到错误 16175 http://code.google.com/p/android/issues/detail?id=16175。默认实现包括使用Storage.java使用 Java API 创建 SQLite 数据库的插件。我一直在读最新来源 https://github.com/apache/cordova-android/tree/master/framework在较新的 (3.x) 版本上,他们似乎总是使用 WebSQLite。

  1. 是的,两者都会创建一个数据库文件,但它的路径会不同。事实上,您可以从应用程序中的 JavaScript 代码和 Java 代码打开同一个数据库。

  2. 相同类型的数据库。 SQLite 是管理文件结构的本机 C 层。事实上,您还可以从本机 Android 应用程序使用此本机 C API。

  3. Cordova / Phonegap 使用内置支持中的 SQLite(如果可用)(在 Android 中是这样)。

  4. 是的,他们留在那里。

  5. 是的,有一个限制。查看here https://stackoverflow.com/questions/3482635/what-is-a-maximum-size-of-sqlite-database-on-android了解更多信息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

window.openDatabase() 和 window.sqlitePlugin.openDatabase() 函数之间的区别? 的相关文章

  • 如何在 AndroidEnvironment 构建文件的环境变量中指定下载目录的路径

    使用 Visual Studio 2022 17 2 0 Preview 1 0 我目前正在尝试创建一个 MAUI 应用程序 该应用程序已经在 Windows 上运行良好 也可以在 Android 下运行 该应用程序使用一个库 SaxonC
  • Android Studio 3.1 无法解析符号(主题、小部件、attr 等)

    我今天将 Android Studio 升级到 3 1 现在 Android Studio 表示无法解析大多数资源的符号 例如ThemeOverlay in styles xml or attr actionBarSize 到目前为止 这似
  • Android - 同一行中的两个按钮填充整个宽度

    我在定义相对布局时遇到了一些问题 我有一个带有滚动的列表视图 并且两个按钮始终在列表视图的底部可见 我只是希望我的两个按钮有 50 的宽度 填充该线 这是我的代码
  • Urban Airship:默认状态栏通知的自定义图标

    Urban Airship 建议创建自定义通知CustomPushNotificationBuilder如果您想对状态栏通知进行任何修改 包括简单地更改图标 不幸的是 使用RemoteView因为通知会带来许多与定制制造商和 或特定于平台的
  • 在 Android 4.2.2 和 4.3 上关闭 BluetoothSocket 时出现致命信号 11 SIGSEGV

    我的应用程序在 Android 2 3 3 到 4 1 2 下运行良好 但自从 Android 4 2 2 和 Android 4 3 以来 我有一个 fatal signal 11 SIGSEGV at 0x00 当我关闭蓝牙插座时 我查
  • 动态添加导航抽屉中的项目

    我创建了抽屉 但是我想动态设置抽屉的项目列表 意味着从数据库获取数据并设置为抽屉列表 是否可以 是的 比如何 我也知道静态抽屉 尝试这个 final Menu menu navigationView getMenu for int i 1
  • 当应用程序崩溃时,Android Studio ADB 会清除 logcat 文件!哦美伊

    刚刚升级了最新的Android Studio 现在 当应用程序崩溃时 日志文件 adb logcat 就会消失 它不仅停止记录整个日志似乎突然被删除了 对于调试来说不太酷 我需要设置日志缓存大小或其他什么吗 还注意到调试器需要很长时间来收集
  • android studio 中 xml 文件的设计预览无法“打开”

    我在制作一个 Android 项目时遇到了一个问题 更新 android studio 后 我的 xml 文件之一设计预览将无法打开 我收到 2 个错误 我已经寻找了解决方案 并且已经尝试了很多我在网上找到的东西 但都没有改变这种情况 第一
  • 无法在活动和远程服务之间共享 SharedPreferences - Android 错误或功能?

    我想在 SharedPreferences 更改时更新远程服务 以下内容用于 API 级别 8 Android 2 2 我的活动有一个OnPreferencesChangedListener它通过服务绑定器对象调用远程服务 远程服务的接口提
  • 为什么线性布局 maxHeight 不起作用?

    这是我的布局 我在线性布局上设置了最大和最小高度 但最大高度似乎不起作用 事实上如果TextView R id testo有很多文本 不会被修剪 如果我设置固定高度 则不会发生这种情况 但我不想设置固定高度 以便在选择溢出屏幕模式时正确调整
  • 罐子不匹配!修复使用 appcompat_v7 和 Facebook sdk 时的依赖关系。

    我在我的项目中使用 appcompat v7 库和 facebook sdk 并且这两个库都有 android support v4 jar 如果我删除任何 jar 则相应的库将无法工作 并且不允许同时拥有这两个 jar 我应该怎么办 请帮
  • 使对话框/活动始终位于顶部

    如何将对话框 活动保持在其他活动之上 无论用户是否在活动之间切换 它都应该始终处于活动状态 您可以使用相对布局作为父级 通过使用相对布局 您可以重叠其他布局 所以 你必须使用相对布局的两个子布局 在一个孩子中 您将弹出窗口 而在另一种布局中
  • 围绕右下角对齐图像

    我正在使用相对布局将一个较小的图像叠加在较大的图像之上 我希望较小图像的右下角与较大图像的 B R 角重合 我在布局 XML 中使用边距参数 指定倾斜测量 但这似乎不适用于所有设备和分辨率 在某些情况下 小图像会从边框移动 4 5 像素 是
  • Android MediaCodec 在异步模式下比同步模式下慢?

    再次 我有一个关于 Android 的 MediaCodec 类的问题 我已成功解码原始 h264 内容并将结果显示在两个纹理视图中 h264 流来自运行 openGL 场景的服务器 该场景有一个摄像头 因此可以响应用户输入 为了进一步减少
  • Android 中的 Sqlite 全文搜索对非英语字符的 Unicode 支持

    滚动到末尾以跳过说明 背景 在我的 Android 应用程序中 我想使用非英语 Unicode 文本字符串来搜索存储在 SQLite 数据库中的文本文档 字段中的匹配项 我了解到 所以我认为 我需要做的是实施一个使用 fts3 fts4 进
  • 如何从github项目获取jar? [复制]

    这个问题在这里已经有答案了 我想使用官方网站上的 kSoap2 android 库http simpligility github io ksoap2 android index html http simpligility github
  • indexoutofboundException :setSpan (2...2) 结束长度超出长度 1

    I ve a MultiAutoCompleteTextView当用户按空格键时 我在其中创建芯片文本的自定义控件 我不希望用户在文本框为空时最初输入空格 所以我放了一个inputFilter以防止用户最初放置空格 这是过滤器代码 priv
  • ACTION_SEND 强制通过电子邮件发送

    每次我创建一个从应用程序发送电子邮件的操作时 它都会提示许多选项 包括 QR 客户端 有没有办法强制仅通过电子邮件客户端发送 发送电子邮件的代码 String rec owner email i new Intent Intent ACTI
  • 如何展开和折叠列表视图中的项目

    我对安卓还很陌生 我想实现一个列表视图 它包含一些列表项 当单击它们时 它们应该展开以显示更多信息 但我找不到办法做到这一点 这是我的activity main xml
  • 使用 Android API 发布推文

    我一直在寻找一种使用 Android 应用程序发布推文的方法 但我发现的所有方法都不起作用 我不得不承认 Twitter 的 API 并不是那么容易理解 但是我的代码并不长 而且我看不出我的错误在哪里 这是我的代码 public class

随机推荐

  • 如何使用 Yarn 升级所有范围内的软件包?

    是否可以升级我的依赖项部分中的所有特定范围的包package json通过使用 Yarn 包管理器 例如 yarn upgrade scope 这将升级所有范围内的包yarn lock and package json file https
  • 使用pygame进行多线程处理,程序崩溃

    大家好 提前感谢您的帮助 我刚刚发现了 pygame 一个 python 库 我想用它玩一下 但我遇到了一个问题 我尝试在代码中使用线程 但每次启动程序时都会崩溃 我已经隔离了问题并且我知道它是thread 1这会导致崩溃 因为当我将其注释
  • 如何将文本输入与图像按钮对齐?

    我有一个表单 其中输入字段的最后一行后面跟着 2 个图像按钮 无论我尝试什么 我似乎都无法将按钮与字段水平对齐 这是所有代码 http jsfiddle net h3ZPk http jsfiddle net h3ZPk 添加此规则 but
  • 使用未声明的标识符 self [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我创建了一个名为 Data pars
  • ASP.Net 1.1 视图状态安全

    在 ASP Net 1 1 中 最终用户是否可以在将视图数据发送回服务器之前更改视图数据 例如使其看起来像是在不存在的下拉列表中选择了一个项目 我尝试使用 firebug 操作下拉列表中的值 但服务器似乎忽略了这一点 我推测是因为视图状态表
  • BigQuery Python 客户端库中查询结果的差异

    我想知道 query 的返回值和 query result 之间的区别 在 BigQuery Python 客户端库中 bigquery client bigquery Client myQuery SELECT FROM mytable
  • 将columnNames动态传递给cassandraTable().select()

    我在运行时读取文件的查询并在 SPark Cassandra 环境中执行它 我正在执行 sparkContext cassandraTable keyspaceName colFamilyName select col1 col2 col3
  • 如何关闭 PDO 句柄

    我正在使用 PDO 访问 PHP 中的两个 SQLite 3 数据库 我想在查询期间通过重命名数据库文件来切换数据库文件 但在文件打开时我无法执行此操作 因为它会给出文件正在被另一个进程使用的错误 我尝试关闭持久连接并将句柄设置为空 但都不
  • 从命令行模拟执行二进制文件?

    有没有办法从命令行在 Simics 模拟下执行简单的 Linux 二进制文件 就像是 simics some flags a out Simics 现在没有开箱即用的应用程序模式 或系统调用模式 根据需要 可以将有效负载编译为 ELF 文件
  • 在c#中的TREEVIEW中添加复选框

    我想添加复选框到我的应用程序中树视图中某个父节点的子节点 我应该如何添加它 TreeView拥有一个名为CheckBoxes 如果设置为true 它显示所有子节点的复选框
  • 可变长度表中的内存分配

    假设我在中定义了以下可变长度表WORKING STORAGE 01 SOAP RECORD 05 SOAP INPUT PIC X 8 VALUE SPACES 05 SOAP STATUS PIC 9 VALUE ZERO 05 SOAP
  • 将 Spongycastle 与 Proguard 一起使用

    我一直在努力使用 Proguard 来让 Spongycastle 正常工作 大多数时候 问题出现在我导出签名的 APK 时 要么出现错误 要么应用程序在启动前崩溃 因此 我设法收集信息以获得有效的混淆器配置 optimizationpas
  • 如何通过 Emacs 23.1 内置集成设置 SVN 密码?

    我正在 CentOS 6 2 上做一个项目 使用发行版提供的 Emacs 23 1 1 和使用 svnserver 的 subversion 我无法在任何地方找到如何设置存储库访问密码 关于此还有另一个问题 SVN for Emacs 如何
  • View 中对 ViewModel(即其 DataContext)的引用是否对 MVVM 模式有害?

    让我们说一个ViewModel发布一个Event and a View它正在使用该虚拟机作为其DataContext订阅该Event通过强制转换来获取对 VM 的引用DataContext到虚拟机实例 vm DataContext as M
  • pandas 堆叠数据框

    我有一个数据框 看起来像 sensorId 1 2 3 9b f3 55 19 00 4b 12 00 1 7 8 bf f3 55 19 00 4b 12 00 6 5 9 da f3 55 19 00 4b 12 00 1 1 2 我想
  • Neo4j 数据库大小增长

    我使用 neo4j 3 0 1 社区 并且我有几 GB 的数据 这些数据很快就会过时 比如每天 2 3 次 我必须先创建新数据 然后删除旧数据 因此在任何时间点都有一些数据可用 问题是 Neo4j 不使用已删除节点 关系中的空间 我使用 M
  • matplotlib 中的十六进制 X 轴

    是否可以以某种方式在 matplotlib 中以十六进制表示法打印 X 轴上的值 在我的图中 X 轴代表内存地址 您可以在轴上设置格式化程序 例如FormatStrFormatter http matplotlib org api tick
  • 指数超出范围。必须为非负数且小于集合的大小

    我在跟踪我的数据密钥时收到此错误 我不确定为什么我的数据密钥索引超出范围 这是我的代码 protected void GridView1 RowDataBound object sender GridViewRowEventArgs e v
  • Bootstrap 轮播中的 Highcharts 内容不会根据轮播自动调整大小

    我有一个高图表作为引导程序轮播中第二个项目的内容 div 内容 如果它位于第一个轮播幻灯片 项目上 它的大小调整得很好 但是 如果高图表位于第二张幻灯片上 则滑入时不会调整大小 如果不是第一个可见的轮播幻灯片 项目 如何自动调整轮播内容的大
  • window.openDatabase() 和 window.sqlitePlugin.openDatabase() 函数之间的区别?

    使用 Cordova 版本 3 x 和 Android 版本 2 x 至 4 x 我想知道 我的理解是否正确 所有 Android 设备默认都有一个用于创建 sqlite 数据库的 sqlite 程序 接口 上述两个数据库函数调用是否在设备