gpt4 book ai didi

java - 嵌套循环不会在长度大于 1 的内部循环中执行查询

转载 作者:行者123 更新时间:2023-11-29 03:45:01 25 4
gpt4 key购买 nike

抱歉,由于我的其他用户名和密码,我无法提供反馈,无论如何这里是问题所在:

我正在开发一个基于 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]);
}
}

不管 select 的大小如何,只要 sintom 的长度为 1 就可以正常工作,大于 1 将无法正常工作.

更新
我只是使用了准备语句但问题仍然存在,如果内循环的长度大于 1,它将无法工作!这是我所做更改的代码:

if (errore.equals("")) {
try {
/* Statement st = conn.createStatement();
Statement[] si=new Statement[selec.length];
for(int i=0;i<selec.length;i++)
si[i]=conn.createStatement(); */
PreparedStatement ps = conn.prepareStatement(
"INSERT INTO malattia (nome, eta, descrizione, sesso, etnia, sintomi)
values (?, ?, ?, ?, ?, ?)");


for(int i=0; i<selec.length; i++){
for(int j=0;j<sintom.length;j++){
// si[i].executeUpdate(var[(i*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();
}
}
}
//st.executeUpdate(q);
ps.close();
conn.close();
ris = "si";

完整的服务器代码:

             public String aggiungi_malattia(String malattia, int eta, String descrizione, String[] sexarra, String[] selec, String[] sintom) {
String ris = "no";
String errore = connetti();
if (errore.equals("")) {
try {
PreparedStatement ps = conn.prepareStatement("INSERT INTO malattia (nome, eta, descrizione, sesso, etnia, sintomi) values (?, ?, ?, ?, ?, ?)");
else {
for(int i=0; i<selec.length; i++){
for(int j=0;j<sintom.length;j++){

// si[i].executeUpdate(var[(i*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();
}
}
}



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

服务器返回 rissino 取决于查询的成功,这里我得到 si 如果 sintom 这是内循环的长度为 1 否则我得到 no 我不知道到底是什么导致它响应 此外,这是一个基于 SOAP 的网络服务,我可以调试系统的客户端部分而不是服务器部分

最佳答案

在我苦思冥想数小时之后,问题出在了数据库中!!发生的事情是,由于 sintomi 列是一个 FK,它引用了一个多值的 Sintomi 表,因此它是表 malattia 的主键,所以我传递的值需要已经存在于表 sintomi 所以列 sintomi 可以引用它!无论如何,从我提供的信息来看是不可能理解的,谢谢大家!一如既往的好,当事情失控时,你们就在那里。

关于java - 嵌套循环不会在长度大于 1 的内部循环中执行查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7169169/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com