Oracle不能嵌套地执行查询操作。本质上说,一个Statement只能有一个ResultSet。
当你开了一个ResultSet,又查询得到一个新的ResultSet的时候,它会把前面的ResultSet关闭。为了避免这个问题,你可以用一个connection开两个Statement;
也可以先把第一次查询得到的结果先保存起来。

解决方案 »

  1.   

    谢谢楼上的,那我曾经有这样的形式的语句是可以运行的:
    connect co=new connect("Select ......");
    while(co.res.next){
    connectno upd=new connectno("update ....");
    }
    也就是说如果连接没有产生ResultSet就不会有错??
    你说的用一个connection开两个Statement具体什么操作?
      

  2.   

    第一个问题:你说的正确。只要不产生新ResultSet,它不会自动关闭你在用的ResultSet。
    第二个问题:Statement stmt1 = conn.createStatment(sql1);
                ResultSet rs1 = stmt1.executeQuery();
                while(rs1.next()){
                         ...
                  Statement stmt2 = conn.createStatment(sql1);
                  ResultSet rs2 = stmt1.executeQuery(); 
                     rs2.getXXX(1):              
                  rs2.close();
                  stmt1.close();
                }
                rs1.close();
                stmt1.close();
      

  3.   

    更正一下:
    Statement stmt1 = conn.createStatment(sql1);
                ResultSet rs1 = stmt1.executeQuery();
                while(rs1.next()){
                         ...
                  Statement stmt2 = conn.createStatment(sql2);
                  ResultSet rs2 = stmt2.executeQuery(); 
                     rs2.getXXX(1):              
                  rs2.close();
                  stmt2.close();
                }
                rs1.close();
                stmt1.close();
      

  4.   

    还得麻烦你一下
    Statement stmt1 = conn.createStatment(sql1);sql1是SQL语句嘛?? 怎么会在createStatment,不是在executeQuery里嘛?