你定义两个ResultSet就不会出错,或者一个,但在再次使用之前先close。

解决方案 »

  1.   

    CallableStatement stmt=conn.prepareCall("{call getCustomerName(a,b)}");
      ResultSet rset=null;
      rset=stmt.executeQuery();//第一次产生结果集
      ....................
    rset.close();
    rset=null;
      rset=stmt.executeQuery();//第二次产生结果集
      

  2.   

    其实就是因为你关了所以才不行用的,把rset.close()去了,或,用两个连接,
      

  3.   

    用的是SQLserver数据库。在用第二次前先关闭我也试过的,也不行。
    就算你用再新建一个reseltset rest2=stmt.executeQuery();然后用rset2也是不行的,除非用CallableStatement重新创建一个相同的stmt2,再用rset2调用stmt2。不知道大家有没有用过。如果是一般的SQL语句而不是存储过程那么用Statement而不是CallableStatement就是可以多次调用的。
    有没有高手指点这个问题??多谢
      

  4.   

    另:
       错误内容:
    Value can not be converted to requested type. 
      

  5.   

    另:
       错误内容:
    Value can not be converted to requested type. 
      

  6.   

    要close除非你在创建一个连接
      

  7.   

    rset=stmt.executeQuery();//第一次产生结果集
      .......
      
      if(rset != null) rset.close;
      if(stmt != null) stmt.close;
      .........
      stmt=conn.prepareCall("{call getCustomerName(a,b)}");
      rset=stmt.executeQuery();//第二次产生结果集
      

  8.   

    nm_2j(夜奔),你的方法有一个问题,对固定参数的是可以这样做,但如果stmt=conn.prepareCall("{call getCustomerName(?,?)}");那么就不行了,你怎么去设置参数呢?重复两次还可以做,如果100次呢?
    比如我要有个循环要执行100次,那怎么调用?
      

  9.   

    你在rset=stmt.executeQuery()两次调用之间是否重新设置了参数???如果重新设置了参数,那么你在重新设置参数之前是否清空了上次设置的参数???把你的出错信息贴完整些,还有出错地方的代码也贴出来,这样找方便些。
      

  10.   

    不好意思,我友作了测试,不管清不清空上次的参数都一样可以运行。
    我这有个例子运行的很好:
    Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); 
    Connection c = DriverManager.getConnection   ("jdbc:microsoft:sqlserver://127.0.0.1;databasename=pubs;user=sa;pwd=");
    CallableStatement ps = c.prepareCall("{call P_Select (?)}");
    ps.setInt(1,1);
    ResultSet rs = ps.executeQuery();
    rs.next();
    System.out.println("名字:"+rs.getString(2));
    ps.clearParameters();
    ps.setInt(1,3);
    rs = ps.executeQuery();
    rs.next();
    System.out.println("名字:"+rs.getString(2));
    照说跟你的是差不多的,不过你最好还是仔细检查一下你的。