Safari中的HTML5存储是否可以进行交易
-
05-07-2019 - |
题
不是在包含SQL语句列表的JSON文件上执行每个循环并一次传递一个,而是使用Safari客户端存储来简单地将数据包装在“BEGIN TRANSACTION”中。 /“COMMIT TRANSACTION”并在一次调用中将其传递给数据库系统?循环1,000多个语句需要花费太多时间。
目前一次迭代一个交易:
$j.getJSON("update1.json", function(data){ $j.each(data, function(i,item){ testDB.transaction( function (transaction) { transaction.executeSql(data[i], [], nullDataHandler, errorHandler); } ); }); });
试图找出如何只打一个电话:
$j.getJSON("update1.json", function(data){ testDB.transaction( function (transaction) { transaction.executeSql(data, [], nullDataHandler, errorHandler); } ); });
有人试过这个并成功吗?
解决方案
我在文档中找到的每个示例似乎只显示每个 executeSql
命令的一个 SQL
语句。我只是建议展示一个“ajax微调器”。加载图形并循环执行SQL。你可以在事务中保留所有内容,但循环仍然需要在那里:
$j.getJSON("update1.json",
function(data){
testDB.transaction(
function (transaction) {
for(var i = 0; i < data.length; i++){
transaction.executeSql(data[i], [], nullDataHandler, errorHandler);
}
}
);
}
);
在事务中移动循环并使用 for i =
应该有助于从循环中获得更快的速度。 $。每个
适用于不到1000次迭代,之后(var = i ... 的原生可能会更快。
注意使用我的代码,如果您的任何SQL语句抛出错误,整个事务将失败。如果这不是你的意图,你需要将循环保持在交易之外。
其他提示
我从来没有搞过HTML5数据库存储(虽然有本地/ sessionStorage),我认为可以运行一大串语句。使用 data.join(
separator here
)
来获取 data
阵列。
是的,可以使用webSQL在单个事务中处理整组语句。您实际上甚至不需要使用BEGIN或COMMIT,只要您从同一事务中进行所有的executeSql调用,就会自动为您处理。只要你这样做,每个语句都包含在事务中。
这使得该过程更快,并且使得当您的一个语句出错时它会回滚整个事务。
不隶属于 StackOverflow