【发布时间】: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