我有一个函数可以将一些数据保存到我的数据库中,并且在 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 模式,但速度真的很慢。
一些想法?