1

不是对包含 SQL 语句列表的 JSON 文件执行每个循环并一次传递一个,Safari 客户端存储是否可以简单地将数据包装在“BEGIN TRANSACTION”/“COMMIT TRANSACTION”中并传递一次调用到数据库系统?循环 1,000 多个语句需要太多时间。

当前一次迭代一个事务:

$j.getJSON("update1.json",
  功能(数据){
    $j.each(数据,函数(i,项目){
            testDB.transaction(
                功能(交易){
                    transaction.executeSql(data[i], [], nullDataHandler, errorHandler);
                }
            );
   });
});

试图弄清楚如何只打一个电话:

$j.getJSON("update1.json",
  功能(数据){
            testDB.transaction(
                功能(交易){
                    transaction.executeSql(data, [], nullDataHandler, errorHandler);
                }
            );
});

有没有人试过这个并成功了?

4

3 回答 3

1

我在文档中可以找到的每个示例似乎每个命令只显示一个SQL语句。executeSql我只是建议显示一个“ajax spinner”加载图形并在循环中执行您的 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 =应该有助于加快循环速度。$.each适用于少于 1000 次迭代,之后本机for(var = i...可能会更快。

注意使用我的代码,如果您的任何 SQL 语句抛出错误,整个事务将失败。如果这不是您的意图,则需要将循环保持在事务之外。

于 2009-11-29T21:15:26.153 回答
0

我从来没有弄乱过 HTML5 数据库存储(虽然有本地/会话存储),我认为可以运行一大串语句。用于获取数组的字符串表示形式。data.join(separator here)data

于 2009-11-25T22:04:21.370 回答
0

是的,可以使用 webSQL 在单个事务中处理整组语句。实际上,您甚至不需要使用 BEGIN 或 COMMIT,只要您从同一事务中进行所有 executeSql 调用,它就会自动为您处理。只要您这样做,每个语句都会包含在事务中。

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

于 2011-11-07T22:25:47.250 回答