3级嵌套循环查询不会运行外循环

时间:2011-08-25 02:24:59

标签: java mysql sql jdbc nested-loops

我有3级嵌套循环,它应该执行一个查询,是一个更大的web服务的一部分,但问题是最外面的循环只执行了一半代码如下:

       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 个答案:

答案 0 :(得分:1)

我还没有尝试你的程序的逻辑,但我建议你看看Reusing a PreparedStatement multiple times

我从未使用重置准备好的语句参数而不再获取实例的情况(poolpreparedstatement可用于缓存语句)。这可能是这里的问题

答案 1 :(得分:0)

我通过查看服务器日志找到了答案,@ Stephen C在评论中建议,错误是由于拒绝执行查询引起的,外部循环传递的是不同的值而其他值保持不变,但是,由outter传递的值不包括表的主键,因此查询实际上是重复的。