문제

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);
                }
            );
});

아직 이것을 시도하고 성공한 사람이 있습니까?

도움이 되었습니까?

해결책

문서에서 찾을 수있는 모든 예는 하나만 표시하는 것 같습니다. SQL 진술 당 executeSql 명령. "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와 함께) 하나의 거대한 진술을 실행할 수 있다고 가정합니다. 사용 data.join(separator here) 문자열 표현을 얻으려면 data 정렬.

예, webSQL을 사용하면 단일 트랜잭션 내에서 전체 명령문 그룹을 처리할 수 있습니다.실제로 BEGIN이나 COMMIT를 사용할 필요도 없습니다. 동일한 트랜잭션에서 모든 ExecuteSql 호출을 수행하는 한 이는 자동으로 처리됩니다.이렇게 하면 모든 명세서가 거래에 포함됩니다.

이렇게 하면 프로세스가 훨씬 빨라지고 명령문 중 하나에 오류가 있을 때 전체 트랜잭션을 롤백할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top