SQL语句是通过PhoneGap'按顺序执行的吗;的Web SQL数据库
Are SQL Statements Executed in Sequential Order via PhoneGap's Web SQL Database?
PhoneGap Web SQL数据库文档http://docs.phonegap.com/en/3.1.0/cordova_storage_storage.md.html#SQLTransaction列出了以下JavaScript代码片段:
function populateDB(tx) {
tx.executeSql('DROP TABLE IF EXISTS DEMO');
tx.executeSql('CREATE TABLE IF NOT EXISTS DEMO (id unique, data)');
tx.executeSql('INSERT INTO DEMO (id, data) VALUES (1, "First row")');
tx.executeSql('INSERT INTO DEMO (id, data) VALUES (2, "Second row")');
}
我是否保证上面代码片段中的四条SQL语句将按顺序执行(即,DROP TABLE命令肯定会首先执行,然后是CREATE TABLE语句,等等)?有很多关于PhoneGap Web SQL数据库API的异步特性的帖子,但我找不到任何关于PhoneGap Web SQL Database API的sequence性质的帖子。正如您可能想象的那样,如果DROP TABLE语句没有首先完成执行,那么执行CREATE TABLE语句就没有任何意义。
不幸的是,这并不能保证。Websql规范并没有规定请求必须按照它下的订单执行,而IndexedDB API则规定了。但大多数实现都尊重请求排序,但很少有不尊重。
正确的方法是监听请求成功回调,并使用回调中的tx来保证顺序执行。
是。除非您有一些条件分支,否则这些行将按顺序执行。。就像其他人一样。
对于上面的代码段,它将按顺序执行。。保证。
我也遇到过同样的问题。我写了一个函数,使它更容易避免回调地狱。我相信可能也有类似的事情,但这是我的。我用100000条线路测试了它,没有问题
function runSqlSeries(tx, sqls, parameterss, fnum, callback) {
if (typeof sqls === 'string') {
sqls = [sqls];
}
var totalNumber = sqls.length;
var sqlIndex = fnum;
if (parameterss && sqls.length == 1 && parameterss.length > 1) {
//ie one sql statement run many times
totalNumber = parameterss.length;
sqlIndex = 0;
}
if (fnum >= totalNumber) {
callback(true, "success - ran " + fnum + " sql statements");
return;
}
var successFn = function() {
astracore.runSqlSeries(tx, sqls, parameterss, fnum + 1, callback);
}
var errorFn = function(tx, error) {
callback(false, "Error running function " + fnum + " " + error.message);
}
var parameters = [];
if (parameterss) {
parameters = parameterss[fnum];
}
tx.executeSql(sqls[sqlIndex], parameters, successFn, errorFn);
};
相关文章:
- 从 Web SQL 数据库检索音频并使用 Web 音频 API 播放
- 外键的HTML5 Web SQL值
- 具有Web SQL数据库的客户端存储
- 如何使用函数从Web SQL数据库中检索值
- Web SQL事务在javascript函数中未正确执行
- SQL语句是通过PhoneGap'按顺序执行的吗;的Web SQL数据库
- 如何在Web SQL数据库中逐行插入文本文件
- 如何在 Web sql 中显示事务成功警报
- Web SQL 将数据插入到多行中
- 无法在 Web SQL 数据库中创建新表
- Web sql 仅适用于调试
- Android 4.0.3 Web 浏览器是否支持 Web SQL 数据库?
- Web SQL 数据库 - 执行 asyc 调用并继续
- Web SQL Grow Database for iOS
- Web Sql 选择语句无法提取第三列
- JQuery Mobile:如何在查询 Web SQL 时显示消息
- 在HTML 5 / Javascript中批量插入到客户端数据库(WEB SQL)
- 如何在node-webkit应用程序中连接Web sql
- JavaScript Web SQL回调插入(如果不存在)
- 构建连接到SQL server的web应用程序的步骤