javascript - phonegap 上的 db.transaction 问题

标签 javascript android cordova web-sql

我有一个函数可以将一些数据保存到我的数据库中,并且在 cordova 2.4 上一切正常,但是我升级到 cordova 2.6 并且我的数据库开始出现一些问题,它变得很慢并且开始出现一些回调问题.

我的第一个问题是当我调用 tx.executeSql 时触发给 db.transaction 的回调

function populateDB(tx) {
     tx.executeSql('DROP TABLE IF EXISTS DEMO'); /* <-- succesCB is fired */
     tx.executeSql('CREATE TABLE IF NOT EXISTS DEMO (id unique, data)'); /* <-- succesCB is fired again */
     tx.executeSql('INSERT INTO DEMO (id, data) VALUES (1, "First row")'); /* <-- succesCB is fired again */
     tx.executeSql('INSERT INTO DEMO (id, data) VALUES (2, "Second row")'); /* <-- succesCB is fired again */
}

function errorCB(err) {
    alert("Error processing SQL: "+err.code);
}

function successCB() {
    alert("success!");
}

var db = window.openDatabase("Database", "1.0", "Cordova Demo", 200000);
db.transaction(populateDB, errorCB, successCB);

在升级之前,它在交易功能结束时触发(在本例中为 populateDB),在 chrome 上也会在结束时触发。

什么是正确的行为?在 executeSql 上或在 populateDB 结束时触发?

我在 Galaxy S2 (4.1.2)、Asus Transformer TF101 (4.0.3)、Galaxy Tab (4.0.4) 上有相同的行为

我的第二个问题是,当我插入所有数据时需要很长时间,对于 13 000 条记录大约需要 5 分钟我尝试插入像 INSERT INTO mytable (id, x) VALUES (1, "sas "), (2, "dsfdsf"), ... 而且速度要快得多,但它仅在使用 sqlite >= 3.7.11 时有效,所以我尝试了 UNION SELECT 模式,但速度非常慢。

一些想法?

最佳答案

我不太确定你的问题,但我看到了几个问题。

WebSQL 版本打开被破坏。建议开通流程为无版本开通,然后使用改版交易,如下

var db = window.openDatabase("Database", '', "Cordova Demo", 200000)
if (db.version != '1.0') {
   db.versionChange(...)
}

另一个是从请求回调中重用 tx。

tx.executeSql('DROP TABLE IF EXISTS DEMO', [], function (t, r) {
  t.executeSql('CREATE TABLE IF NOT EXISTS DEMO (id unique, data)');
});

从您的代码来看,tx 执行未按顺序执行。浏览器可以以任何顺序执行所有四个 then。

关于两个 window.openDatabase,一个是浏览器原生的(如果支持),另一个是 phonegap 通过插件进行的 polyfill。

关于javascript - phonegap 上的 db.transaction 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16042146/

相关文章:

javascript - Uncaught TypeError : OneSignal. once is not a function

javascript - Google Apps 脚本 "ExecutionResponse"对象不包含 "result"

javascript - 如何在使用脚本加载 div 后添加 css?

android - 在 RelativeLayout 中分配额外的空间

ios - 带有 ionic-webview 的 Cordova 移动应用程序无法在 iOS 14 WkWebview 中存储/重试 session cookie

android - Ionic Android 找不到与给定名称匹配的资源..cardBackgroundColor

javascript - 在 PhoneGap Build 上构建 Android 应用程序

javascript - 如何正确检查 Javascript/MeteorJS 中函数返回的子属性

android - SubscriptionInfo.getMnc() 为具有不同运营商的两个 SIM 返回相同的值

Android:AutoCompleteTextView 搜索不同的字段然后在 TextView 中插入什么