Извините, ребята, я не смог предоставить отзыв из-за моего другого имени пользователя и пароля здесь, в любом случае здесь проблема:
Я работаю над основанным на SOAP веб-сервисом, где в какой-то части мне приходится выполнять некоторые запросы к базе данных, используя вложенный цикл, проблема в том, что внутренний цикл выполняется только ОДИН раз, прежде чем сдаться. Это код:
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 и не будет работать.
UPDATE
Я только что использовал подготовленное утверждение, но проблема сохраняется, если длина внутреннего цикла больше 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;
}
Сервер отправляет обратно ris , что равно si или no в зависимости от успеха запроса, здесь я получаю si если sintom , которая равна длине внутреннего цикла, равной 1, в противном случае я получаю нет Я не знаю точно, что заставляет его ответить нет , кроме того это веб-сервис на основе SOAP, я могу отлаживать клиентскую часть системы, а не серверную часть