抱歉,我不能提供反馈,因为我的其他用户名和密码在这里,无论如何这里是问题:
我正在开发一个基于SOAP的webservice,在其中的一部分,我必须使用嵌套循环对数据库执行一些查询,问题是在放弃之前,内部循环只执行了一次

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,它就可以正常工作,而不会工作。
更新
我刚刚使用了prepared语句,但问题仍然存在,如果内环的长度大于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否则我得到no我不知道是什么原因导致它以no响应另外这是一个基于SOAP的web服务,我可以调试系统的客户端而不是服务器端

最佳答案

几个小时不停地敲打我的脑袋,问题就出在数据库里了!!由于sintomi列是引用sintomi表的FK,而sintomi表是多值的,因此它是malattia表的primarykey,所以我传递的值必须已经存在于sintomi表中,这样sintomi列才能引用它!!无论如何,从我提供的信息来看,这是不可能理解的,谢谢大家!一如既往的好,当事情失控的时候你们都在。

10-01 02:24