質問

SQLステートメントのリストを含むJSONファイルで各ループを実行し、それらを一度に1つずつ渡すのではなく、Safariクライアント側のストレージを使用して、単に「BEGIN TRANSACTION」でデータをラップすることができます。 /"トランザクションをコミット"それを1回の呼び出しでデータベースシステムに渡しますか? 1,000以上のステートメントのループには時間がかかりすぎます。

現在、一度に1つのトランザクションを繰り返す:

$j.getJSON("update1.json",
  function(data){
    $j.each(data, function(i,item){
            testDB.transaction(
                function (transaction) {
                    transaction.executeSql(data[i], [], nullDataHandler, errorHandler);
                }
            );
   });
});

コールを1回だけ行う方法を見つけようとしています:

$j.getJSON("update1.json",
  function(data){
            testDB.transaction(
                function (transaction) {
                    transaction.executeSql(data, [], nullDataHandler, errorHandler);
                }
            );
});

これを試して成功した人はいますか?

役に立ちましたか?

解決

ドキュメントで見つけることができるすべての例は、 executeSql コマンドごとに1つの 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 = を使用すると、ループの速度が少し向上します。 $。each は1000回未満の反復に適しています。その後、ネイティブの for(var = i ... はおそらくより高速になります。

コードを使用して、SQLステートメントのいずれかがエラーをスローすると、トランザクション全体が失敗します。それが意図しない場合は、トランザクションの外側でループを維持する必要があります。

他のヒント

HTML5データベースストレージを混乱させたことはありません(ただし、local / sessionStorageがあります)。1つの巨大な文字列を実行できると想定します。 data.join( separator here を使用して、 data 配列。

はい、webSQLを使用して、単一のトランザクション内でステートメントのグループ全体を処理できます。実際にはBEGINまたはCOMMITを使用する必要さえありません。同じトランザクションからすべてのexecuteSql呼び出しを行う限り、これは自動的に処理されます。これを行う限り、すべてのステートメントがトランザクションに含まれます。

これにより、プロセスが非常に高速になり、ステートメントの1つにエラーがある場合にトランザクション全体がロールバックされるようになります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top