Javascript phonegap上的db.transaction存在问题
我有一个功能,可以将一些数据保存到我的数据库中,并且在cordova 2.4上运行良好,但是我升级到cordova 2.6,我的数据库开始出现一些问题,速度变慢,并且开始出现回调问题 我的第一个问题是,当我调用tx.executeSql时,会触发对db.transaction的回调Javascript phonegap上的db.transaction存在问题,javascript,android,cordova,web-sql,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 */
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);
函数填充b(tx){
tx.executeSql('DROP TABLE IF EXISTS DEMO');/*您最好使用html5数据库而不是phonegap的数据库。您最好使用html5数据库而不是phonegap的数据库。我不太确定您的问题,但我看到了几个问题
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执行不是按顺序执行的。浏览器可以按任意顺序执行这四个命令
关于两个window.openDatabase
,一个是本机浏览器(如果支持),另一个是通过插件的phonegap polyfill。我不太确定您的问题,但我发现了两个问题
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执行不是按顺序执行的。浏览器可以按任意顺序执行这四个命令
关于两个window.openDatabase
,一个是本机浏览器(如果支持),另一个是通过插件的phonegap polyfill。这里的问题是,这两个都以完全相同的方式调用window.openDatabase(“数据库”,“1.0”,“Cordova Demo”,200000)
这里的问题是两个have的调用方式完全相同window.openDatabase(“Database”,“1.0”,“Cordova Demo”,200000)
很高兴知道所有这些东西,但这并没有解决我的问题。Cordova(phonegap)告诉我这个问题是因为android 4.0在webSQL上使用了shim,但我仍然认为这是一个错误,因为在cordova 2.5上它可以工作,在cordova 2.6上它不能。我会花时间查看cordova文件并找出差异。为什么不试试我的数据库库呢?它可以工作。感谢你知道所有这些东西,但它没有解决问题我的问题。一个cordova(phonegap)告诉我,问题是因为android 4.0在webSQL上使用了shim,但我仍然认为这是一个bug,因为cordova 2.5上它工作,cordova 2.6上不工作。我会花时间查看cordova文件并找出差异。为什么不试试我的数据库库,它会工作。