3-уровневый запрос вложенного цикла не будет запускать внешний цикл - PullRequest
0 голосов
/ 25 августа 2011

У меня есть 3-уровневый вложенный цикл, который должен выполнять запрос, являющийся частью более крупного веб-сервиса, но проблема в том, что внешний цикл выполняется только наполовину, как показано ниже:

       PreparedStatement ps = conn.prepareStatement("INSERT INTO malattia (nome, eta, descrizione, sesso, etnia, sintomi) values (?, ?, ?, ?, ?, ?)");


              if(sexarra.length == 2){

                  for(int k=0; k<sexarra.length; k++)  {
                    for(int i=0; i<selec.length; i++){
                      for(int j=0;j<sintom.length;j++){

                        ps.setString(1, malattia);
                        ps.setInt(2, eta);
                        ps.setString(3, descrizione);
                        ps.setString(4, sexarra[k] );
                        ps.setString(5, selec[i]);
                        ps.setString(6, sintom[j]);
                        ps.executeUpdate();
                      }
                    }
                  }
             }
              else {

                  for(int i=0; i<selec.length; i++){
                        for(int j=0;j<sintom.length;j++){

                        ps.setString(1, malattia);
                        ps.setInt(2, eta);
                        ps.setString(3, descrizione);
                        ps.setString(4, sexarra[0] );
                        ps.setString(5, selec[i]);
                        ps.setString(6, sintom[j]);
                        ps.executeUpdate();

                       }

                  }                   
                 }

                ps.close();
                 //ds.close();
                conn.close();
                ris = "si";
              } catch (SQLException e) {
                    System.out.println("Errore: " + e.getMessage());

                    return ris;
              }
        }
        return ris;
}

Проблема лежит в первой части, где sexarra.lengh=2, точно в самом внешнем цикле, который должен повторяться два раза, но какая программа выдает исключение, как только циклы, связанные с k = 0, я имею в виду он не выполняет циклы, связанные с K=1. У меня были проблемы с вложенными циклами и preparedstatement в течение нескольких дней, и это последний, где я не знаю, что я делаю неправильно. Спасибо за ваше время и усилия людей.

Ответы [ 2 ]

1 голос
/ 25 августа 2011

Мне еще предстоит опробовать логику вашей программы, но я бы посоветовал вам взглянуть на Повторное использование PreparedStatement несколько раз

Я никогда не использовал случай сброса параметров подготовленного оператора беззахват экземпляра снова (poolpreparedstatement может использоваться для кэширования оператора).Это может быть проблемой здесь

0 голосов
/ 26 августа 2011

Я нашел ответ, заглянув в журналы сервера, рекомендованные @ Stephen C в комментариях: ошибка была вызвана отказом в выполнении запроса, внешний цикл передал другое значение, в то время как другие значения остались прежними, но значение, переданное ауттером, не состояло из первичного ключа таблицы, поэтому запрос фактически дублировался.

...