不是在包含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调用,就会自动为您处理。只要你这样做,每个语句都包含在事务中。

这使得该过程更快,并且使得当您的一个语句出错时它会回滚整个事务。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top