比如下面这段代码:
if("startsysuserinfo".equalsIgnoreCase(action)){
  String[] userids=request.getParameterValues("user_id");
  if(userids!=null&&userids.length>0){
    String instr=null;
    for(int index=0;index<userids.length;index++){
      if(instr==null) instr=" '"+userids[index]+"' ";
      else instr+=",'"+userids[index]+"' ";
    }
    if(instr!=null&&instr.trim().length()>0){
      sql="update t_user set user_useful=1 where user_id in ("+instr+")";
      pstmt=con.prepareStatement(sql);
      pstmt.executeUpdate();
    }
  }
}
if(rs!=null) try{rs.close();}catch(Exception ex){};
if(pstmt!=null) try{pstmt.close();}catch(Exception ex){};
pstmt=con.prepareStatement(sql);
rs=pstmt.executeQuery();
while(rs.next()){
  String tmp=rs.getString("user_ID");
}如果if("startsysuserinfo".equalsIgnoreCase(action))条件不满足的话,程序执行正常,如果条件满足的话,程序执行到String tmp=rs.getString("user_id");的时候报告“关闭的语句”错误

解决方案 »

  1.   

    我刚才又加了一些调试信息,把while循环改成如下:
    while(rs.next()){
      System.out.println("111");
      String tmp=rs.getString("user_id");
      System.out.println("222");
    }
    我竟然发现这个循环被执行了两次,输出结果是:
    111
    222
    111
    (接下来是出错信息)
    但是数据库里肯定只有一条记录的啊,如果有多条记录的话,rs.next()可以成功,为什么rs.getString()就会失败呢?而且如果if("startsysuserinfo".equalsIgnoreCase(action))不成立的话,输出结果很正常的!
      

  2.   

    不好意思,我翻了一个愚蠢的错误,sql的值赋值顺序不对