Html java.sql.SQLException:[Microsoft][ODBC驱动程序管理器]将值插入数据库时,光标状态无效

Html java.sql.SQLException:[Microsoft][ODBC驱动程序管理器]将值插入数据库时,光标状态无效,html,jsp,tomcat,sql-server-2005,Html,Jsp,Tomcat,Sql Server 2005,下面的代码是我的应用程序的一部分,当执行此命令时,我得到无效的游标状态错误,我使用的是SQLServer2005、jsp和html <% Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection con = DriverManager.getConnection("Jdbc:Odbc:disman"); java.sql.Statement stmt = con.createStatement(); stmt.exe

下面的代码是我的应用程序的一部分,当执行此命令时,我得到无效的游标状态错误,我使用的是SQLServer2005、jsp和html

<%
  Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
  Connection con = DriverManager.getConnection("Jdbc:Odbc:disman");
  java.sql.Statement stmt = con.createStatement();
  stmt.executeUpdate("insert into earthquake(area,rictor,eqz,kms,city,state,date1,time,population,carea,farea,pland,animals,humanlife,animalsloss,sinjury,mininjury)values('"+area+"','"+rictor+"','"+eqz+"','"+kms+"','"+city+"','"+state+"','"+date1+"','"+time+"','"+population+"','"+carea+"','"+farea+"','"+pland+"','"+animals+"','"+humanlife1+"','"+animalsloss1+"','"+sinjury1+"','"+mininjury1+"')");
String items[]=request.getParameterValues("cmbitem");
   int i=0;
  ResultSet rs1=stmt.executeQuery("select * from earthquake");
  int eid=rs1.getInt("eid");
   while(i < items.length)
   { String itm=items[i];
  if(itm.equals("water bottle"))
   {
 int totallits=rempop*3;
 int totalbottles=(int)(totallits/litperbottle);
 stmt.executeUpdate("insert into eq_requirement(eid,items,noitems) values('"+eid+"','"+itm+"','"+totalbottles+"'");
i++;
break;
   }
  else if(itm.equals("nurses"))
  {
 int totaldoctors=(int)(sinjury/10);
 totaldoctors=(int)(totaldoctors+(mininjury/20));
int totalnurses=totaldoctors*2;
stmt.executeUpdate("insert into eq_requirement(eid,items,noitems) values('"+eid+"','"+itm+"','"+totalnurses+"'");
i++;
break;
   }
  else
   {
    out.println("<script language=javascript>alert('Earth Quake Details not added');</script>");
 }
   }
   out.println("<script language=javascript>alert('Earth Quake Details Added Successfully');</script>");
 con.close();
    }
    catch(Exception e)
  {
       out.println(e);
      }   
}//if update==true
}//if post event
%>

检查您的insert语句,如果您错过了大括号

stmt.executeUpdate("insert into eq_requirement(eid,items,noitems)
     values('"+eid+"','"+itm+"','"+totalbottles+"')");
还有这里

stmt.executeUpdate("insert into eq_requirement(eid,items,noitems) 
values('"+eid+"','"+itm+"','"+totalnurses+"')");
更新:

ResultSet rs1=stmt.executeQuery("select * from earthquake");
while(rs1.next){
  int eid=rs1.getInt("eid");
}
希望这有帮助


旁注:避免sql错误的最佳方法是在执行之前打印查询,并在sql developer中运行它们

Sir谢谢您的回复,但它仍然会给出相同的错误。列名可能是您检查了表中的列吗?我检查了列名,它们与表中的列一样正确。还有一件事是**stmt.executeUpdate(“插入地震(地区、里克托、eqz、kms、城市、州、日期1、时间、人口、carea、farea、计划、动物、人类生命、动物损失、地震、mininjury)值(“+area+”、“+Ri克托+”、“+eqz+”、“+kms+”、“+city+”、“+state+”、“、“+date1+”、“、“+time+”、“、“+carea+”、+pland+”、“、“+FARED+”、“+“、”、“+humanlife1+”、“+animalsloss1+”、“+sinjury1+”、“+mininjury1+”)”;**这工作正常。您是否对它们指定了任何约束条件?我指的是数据库中执行注释中提到的查询的列?现在在哪一行出现错误?