【问题标题】:Android Cordova WebSQL can't count - could not prepare statement (1 too many SQL variables)Android Cordova WebSQL 无法计数 - 无法准备语句(1 SQL 变量太多)
【发布时间】:2016-09-07 09:50:22
【问题描述】:

此错误仅发生在少数(最新型号 android 5)android 设备上。我给 SQLite 这个,它似乎无法计数!

executeSql("update email set IsMarkedAsRead=?, IsMarkedAsReadOnServer=?,IsFlagged=?,IsFlaggedOnServer=? where LocalEmailID=?", [email.IsMarkedAsRead, email.IsMarkedAsRead, email.IsFlagged, email.IsFlagged, email.LocalEmailID], null, sqlerror)

变量数组中有 5 个问号和 5 个元素,除非我发疯了……

抛出此错误:

无法准备语句(SQL 变量太多)

然后抛出这个错误(大概是第一个也触发了这个):

语句回调引发异常或语句错误回调没有返回 false

我们有一个使用标准 Web SQL 的 cordova 应用程序(如果需要,它使用浏览器公开的本机 Sqlite 或 MSOpenTech polyfill)。代码库中有几个地方我们调用 SQL 语句并出现此错误。在某些情况下,没有参数,我们传递一个空数组,但它仍然显示 1 变量太多。在大多数设备上没有错误 - 仅在某些 android 设备上发生。到目前为止,至少在两台设备上看到了这一点(这些是现场用户,尚未在测试中重现)。

存在此问题的示例设备:Samsung Galaxy S5 Duos,用户代理字符串为Mozilla/5.0 (Linux; Android 5.0; SM-G900FD Build/LRX21T; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/50.0.2661.86 Mobile Safari/537.36

有什么想法吗?

【问题讨论】:

  • 这种可能性很小,但还是试试吧。过去,在查询中使用相同的变量名时,我在使用 Cordova WebSQL 时遇到了麻烦,因此我会避免在您传入的参数中使用 email.IsMarkedAsRead、email.IsFlagged 两次。您是否尝试使用本地模拟器运行它比如瑞波?如果(作为测试)您使用:executeSql("update email set IsMarkedAsRead=?, IsFlagged=? where LocalEmailID=?", [email.IsMarkedAsRead, email.IsFlagged, email.LocalEmailID], null, sqlerror)?这行得通吗?

标签: android sqlite cordova web-sql


【解决方案1】:

感谢@nyluke 为你们提供的cmets。我最终将数据库引擎升级到了这个 Cordova Sqlite 插件: https://github.com/litehelpers/cordova-sqlite-ext

我希望这能解决问题。如果我收到更多错误报告,我会更新这个答案。

更新

升级到 Cordova Sqlite 插件几个月后,我再也没有见过这个错误。绝对解决了问题。

不建议使用 WebSQL 标准 cordova 插件,因为它有问题。最有问题的是将您限制为 50mb,并且删除数据不会恢复空间,因此最终您的应用会死掉...

【讨论】:

    猜你喜欢
    • 2018-03-14
    • 2020-05-04
    • 1970-01-01
    • 2021-09-19
    • 1970-01-01
    • 1970-01-01
    • 2021-02-01
    • 2016-10-15
    • 2021-04-26
    相关资源
    最近更新 更多