我正在开发一个基于SOAP的Web服务,其中一部分我必须使用嵌套循环对数据库执行一些查询,问题是内部循环只是在放弃之前只执行一次。这是代码:
for(int i=0; i<selec.length; i++){
for(int j=0; j<sintom.length;j++){
var[(i*sintom.length)+j] = "INSERT INTO malattia (nome, eta, descrizione, sesso, etnia, sintomi) "
+ "VALUES ('" + malattia + "','" + eta + "','" + descrizione + "','" + sexarra[0] + "','" + selec[i] + "','" + sintom[j] + "')";
}
}
这是查询应该执行的地方:
if (errore.equals("")) {
try {
Statement st = conn.createStatement();
for(int i=0; i<selec.length; i++){
for(int j=0;j<sintom.length;j++){
st.executeUpdate(var[(i*sintom.length)+j]);}}
无论选择的大小,只要 sintom 的长度为1,大于1并且它不起作用,它就会正常工作。
感谢您的专家建议,我们非常感谢!
答案 0 :(得分:1)
您的用例是应该使用预准备陈述的情况的完美示例。在the JDBC tutorial中了解有关它们的更多信息。
使用准备好的声明将允许
因此,代码应如下所示:
PreparedStatement ps = conn.prepareStatement("INSERT INTO malattia (nome, eta, ...) values (?, ?, ...)");
for (int i= 0; ...) {
for (int j = 0; ...) {
ps.setString(1, malattia);
ps.setString(2, eta);
...
ps.executeUpdate();
}
}
答案 1 :(得分:1)
尝试使用PreparedStatement及其Batch功能而不是普通查询来简化代码并防止SQL注入。