我有一个功能,可以将一些数据保存到数据库中,并且在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)上具有相同的行为

我的第二个问题是,当我插入所有数据需要一定的时间时,对于13000条记录,大约需要5分钟,我试图将INSERT INTO mytable (id, x) VALUES (1, "sas"), (2, "dsfdsf"), ...它的速度要快得多,但仅在使用sqlite> = 3.7.11时才有效,因此我尝试了UNION SELECT模式,但速度确实很慢。

一些想法?

===============>>#1 票数:1

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

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)');
});

根据您的代码,发送执行没有顺序。 浏览器可以按任意顺序执行所有四个操作。

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

===============>>#2 票数:0

最好使用html5数据库而不是phonegap的数据库。

  ask by sacabuche translate from so

未解决问题?本站智能推荐:

2回复

Phonegap本地存储返回空结果

在应用的首次加载时,我从存储(Phonegap的WebSQL存储类型)中检索数据。 Phonegap存储结果加载良好。 直到... 当我转到应用程序中的另一个页面时: <a href="page2.html" rel="external">Link</a>
1回复

Cordova / Phonegap-使用WebSQL构建数据表

我正在Cordova(Phonegap)的Android / iOS上制作一个小型应用程序。 该应用程序的主要功能是维护数据库中的一些本地数据。 为此,我曾经使用过的WebSQL,科尔多瓦有一个API来使用等。 http://docs.phonegap.com/en/1.2.0/phon
3回复

是否通过PhoneGap的Web SQL数据库按顺序执行SQL语句?

http://docs.phonegap.com/zh/3.1.0/cordova_storage_storage.md.html#SQLTransaction上的PhoneGap Web SQL数据库文档列出了以下JavaScript代码片段: 我是否保证上面代码片段中的四个SQL语句
1回复

websql phonegap应用程序:数据库升级

我正在Google市场商店中升级我的android / phonegap应用。 由于我的疏忽,我需要重新开始,并且需要删除存储在websql中的现有用户数据,然后再次开始以正确的格式捕获数据。 最好的方法是确保首次在用户手机上升级应用程序时删除数据,而不是每次启动应用程序时都删除数据
2回复

phonegap:尝试将json存储在数据库中:

我正在尝试将具有以下json字符串的条目存储在数据库中。 但是,似乎json字符串的格式与db不一致,即使我已阅读文章说这应该很容易: 我努力了: 我收到一个错误,指出错误无法识别的令牌“ {”。 当我执行console.log(jsonString)时,我得到: 任何
1回复

如何开发phonegap SQLite数据库

因此,PhoneGap的存储API支持于2010年弃用的webSQL。在Chrome开发工具中进行测试也已完全破坏了该功能。 有一个人做的本地SQLite插件 https://github.com/brodysoft/Cordova-SQLitePlugin 获得所需速度似乎是个好
1回复

Web SQL连接查询不能仅在Phonegap Android上持续运行

我正在尝试在Phonegap应用程序中运行以下Web SQL查询: 在Chrome,Android浏览器和iOS中,此方法工作正常,但在某些情况下,在已编译的PhoneGap Android应用程序中则无效,返回0行。 我通过简化查询和以下工作完成了一些调试: SELECT *
1回复

如何在cordova + node js + react中添加sqlite \\ websql db的本地文件?

美好的一天! 我正在使用cordova + react js + node js开发android应用程序。 我有想要在应用程序中移植的大数据库。 但是我不想从文件创建它,因为将要执行+-一百万个查询。 如何在我的本地数据库文件(例如,www文件夹)中指向cordova \\ web
2回复

iOS和PhoneGap问题

刚开始尝试使用PhoneGap调整我的html,css,javascript文件到iOS(我也尝试过NimbleKit但结果是一样的)。 我有一个我最初为Blackberry Playbook写的网络应用程序。 该应用程序在Playbook以及Chrome和Safari中运行良好。 但是,
5回复

phonegap - sqlite还是索引数据库?

我是web开发人员,以phonegap开头。 我需要为iPhone,Android和Windows Phone 8创建一个应用程序。 我需要在本地存储一些数据(对于localStorage来说太大)。 我不知道女士解决方案是最好的: Phonegap提供存储(基于WebSQL