2013-07-31 3 views
4

В этом коде внешний запрос sqlite сначала завершает работу, затем он переходит на внутренний запрос sqlite. Пожалуйста, объясните мне, почему это произошло, а также дайте решение моей просьбы.Вложенный запрос Sqlite не работает должным образом

/*Outer Sqlite Query*/ 
db.transaction(function(transaction){ 
transaction.executeSql('SELECT * FROM OuterTable;', [], 
function(transaction,results){ 
    if (results != null && results.rows != null) { 
    for (var i = 0; i < results.rows.length; i++) { 
     /*My work is going here*/    

     /*Inner Sqlite Query Inside lor loop*/ 
     db.transaction(function(transaction){   
    transaction.executeSql('SELECT * FROM MyInnerTable;',[], 
    function(transaction, result){ 
    if (result != null && result.rows != null) {         
     for (var j = 0; j < result.rows.length; j++) { 
       /* My Work is Going here */ 
      } 
      } 
    },errorHandler); 
    } ,errorHandler,nullHandler); 
     /*Inner Sqlite End Here*/     
         } 
         } 
        },errorHandler); 
        } 
        ,errorHandler,nullHandler); 
      /*Outer Sqlite End Here*/ 

Проблема заключается в том, что здесь
Первого ---> Внешнего Sqlite Работа Исполнительная затем Внутренняя Sqlite работа выполняется, но мой Requirment как как для каждого значения Внешнего Sqlite Внутреннего Sqlite будет работать

для примера: -

for(int i=0;i<=10;i++){ 
    for(int j=0;j<=10;j++){ 
    // here inner for loop will work for every value of outer for loop 

    } 
} 

заранее спасибо

+3

Имейте в виду, что эти вызовы являются асинхронными – BeNdErR

ответ

0

Ваш requireme nt для выполнения внутреннего запроса для каждого внешнего запроса не может быть достигнуто так. Поскольку запросы SELECT являются асинхронными вызовами.

Даже внешний цикл for не ожидает завершения запроса по предыдущему индексу. Он будет продолжать выполнение и одновременно запускать запросы SELECT.

Однако для достижения этой цели вы можете использовать рекурсию.

Где каждый внешний цикл вызывает запрос выбора, обратный вызов успеха реализует внутренний запрос и обратный вызов успеха внутреннего запроса рекурсивно вызывает внутренний запрос за требуемое количество раз с требуемым индексом и отправляет количество раз (внутренний цикл для условия) он вызовет внешнего исполнителя запросов с индексом с добавлением.

Надеюсь, что это поможет.