我有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
的问题,这是最新的问题,我不知道我做错了什么。感谢您的时间和精力。
答案 0 :(得分:1)
我还没有尝试你的程序的逻辑,但我建议你看看Reusing a PreparedStatement multiple times
我从未使用重置准备好的语句参数而不再获取实例的情况(poolpreparedstatement可用于缓存语句)。这可能是这里的问题
答案 1 :(得分:0)
我通过查看服务器日志找到了答案,@ Stephen C在评论中建议,错误是由于拒绝执行查询引起的,外部循环传递的是不同的值而其他值保持不变,但是,由outter传递的值不包括表的主键,因此查询实际上是重复的。