try{
      sta = conn.createStatement();
      rs = sta.executeQuery("select * from search");
      while (rs.next()) {
        originStr=rs.getString("url");
        System.out.println("原来的字段是  "+originStr);
        sta.execute("update search set url='"+change(originStr)+"'");
      }这段中sta首先执行一次
sta.executeQuery("select * from search");
然后在rs没有close时又执行了
sta.execute("update search set url='"+change(originStr)+"'");
执行这句后就会使rs被close掉吧,使得 while (rs.next()) 时出现Exception

解决方案 »

  1.   

    嗯,sta的再次执行会先关闭他此前产生的rs吗?
    不过我觉得楼主是不是用sta.executeUpdate("update  代替sta.execute("update 试试看先
      

  2.   

    同意楼上执行SQL语句时会自动把前面的ResultSet对象关闭
      

  3.   

    executeUpdate也是这个异常,问题是说是ResultSet,可是结果是执行正确的,说明没有在执行的时候关闭....
      

  4.   

    再实例化一个新的Connection和Statement来执行executeUpdate吧。
      

  5.   

    你应该再重新创建一个createStatement(),因为一个Statement不能嵌套使用。
      

  6.   

    我认为是jdbc-odbc的问题,我把程序改用mysql数据库,都没有报错,结果如下:
    用execute时,程序只输出了一行“原来的字段是...”,说明sta把rs关闭了。
    用executeUpdate时,程序输出多行“原来的字段是...”,说明sta没有把rs关闭。