ResultSet rs = null;
String sql = "select * from A; select * from B";stmt.execute(sql);
rs = stmt.getResultSet();
//这是得到了默认的第一个结果集;
while(rs.next()){
...
}
//这样写得到第二个结果集,怎么不对?应该怎样写?
stmt.getMoreResults();
//stmt.getMoreResults(1); //这样写也不对;
rs = stmt.getResultSet();
while(rs.next()){
...
}

解决方案 »

  1.   

    int count =0;
    while(rs.next()){
    count = count+1;
    if(count ==2) {
    ...
    }
    }
    =======================================
    rs.next()跳过第一个
    while(rs.next()){
    ...
    }
      

  2.   

    你的SQL语句可以执行吗? 同时执行两句? 
    你可以用union连接两个结果集。
      

  3.   

    没看明白  想得到B的就直接select * from B   
      

  4.   

    ResultSet rs1 = null;
    String sql1 = "select * from A";stmt.execute(sql1);
    rs1 = stmt.getResultSet();
    //这是得到了默认的第一个结果集;
    while(rs1.next()){
    ...
    }ResultSet rs2 = null;
    String sql2 = "select * from B";stmt.execute(sql2);
    rs2 = stmt.getResultSet();
    //这是得到了默认的第一个结果集;
    while(rs2.next()){
    ...
    }
    分開。
      

  5.   

    是执行一个存储过程,要读取几个表的数据到客户端。
    6楼的方法已用过;看文档用 execute() ; getMoreResults() 可以取得多个结果集;
    想问一下如何用这个方法?
      

  6.   


    看文档用 execute() ; getMoreResults() 可以取得多个结果集;
    就是不知怎么用?
      

  7.   

    如何使用execute() ; getMoreResults()?
      

  8.   

    大家都没有人用过execute() ; getMoreResults()这两个方法?
      

  9.   

    大家都没有人用过execute() ; getMoreResults()这两个方法?
      

  10.   

    getMoreResults返回值是个booleanwhile(stmt.getMoreResults()){
         resultSet = stmt.getResultSet();
         while(resultSet.next()){
            ....
         }
    }
      

  11.   

    明白怎么用了,谢谢!还想问你一个问题:
    如果结果集用了ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY这种类型是不是就不能在SQL 语句里使用 LEFT JOIN 语句了?
    如果使用了,在子表里没有数据的话,主表的内容就为空。
      

  12.   

    resultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY只是对结果的游标可不可移动来说的吧,跟查询语句的left join有关系么,不好意思,这方面不是很清楚。。好像含有join或者group by的查询语句不可以对结果集resultset进行更新
      

  13.   

    这个问题也算是解决了。将TYPE_SCROLL_SENSITIVE改为TYPE_SCROLL_INSENSITIVE。还是再问你getMoreResults();getResultSet()问题,
    如果设置了结果集的类型,它提示"该语句没有游标名称,提取类型为 2"是怎么回事?这是执行一个存储过程时报错。执行一个返回多个结果集的查询语句时也报错,但不是这个提示。
      

  14.   

    其实要获取所有的结果集应该是这样的boolean hasRs = stat.execute(sql);
    while(hasRs || stat.getUpdateCount() >= 0) {
      if(hasRs)
         rs = stat.getResult();
      hasRs = stat.getMoreResults();
    }因为如果你有三个语句,分别是select、update、select的
    那么stat.execute首先返回true,
    然后调用getMoreResults问第二条语句是否有结果集,返回false,但是这个时候getUpdateCount()会返回非负整数
    然后再调用getMoreResults问第三条语句是否有结果集,返回true
      

  15.   

    boolean hasRs = stat.execute(sql);
    while(hasRs || stat.getUpdateCount() >= 0) {
      if(hasRs) {
        rs = stat.getResult();
        //read from rs
      }
      hasRs = stat.getMoreResults();
    }
    其实这个才是完整的获取所有结果集的方法,只不过通常我们很少这样用(也不是所有数据库支持多个结果集)
      

  16.   

    获取多个结果集的方法我已学会,现在的问题是如果设置了结果集的类型,它就报错,如何解决?将结果集设为TYPE_SCROLL_INSENSITIVE;
    如果设置了结果集的类型,它提示"该语句没有游标名称,提取类型为 2"是怎么回事?这是执行一个存储过程时报错。执行一个返回多个结果集的查询语句时也报错,但不是这个提示。
      

  17.   

    getMoreResults(int current) ; 这个里的参数应该如何使用;
    getMoreResults(0);getMoreResults(1)都不对?
      

  18.   

    唉,你根本没有看文档吧!
    Parameters:
    current - one of the following Statement constants indicating what should happen to current ResultSet objects obtained using the method getResultSet: Statement.CLOSE_CURRENT_RESULT, Statement.KEEP_CURRENT_RESULT, or Statement.CLOSE_ALL_RESULTS 
    清楚说明了这个参数的作用啊!它表达的只是是否需要关闭之前已经获取的结果集而已。我那个while循环应该可以获取所有结果集啊,有问题吗?
      

  19.   

    如果你只想获取第二个结果集,你自己弄个计数变量int index,在if(hasRs)中index++,如果等于你想要的你再取这个ResultSet对象操作不过我真想说,执行多个SQL语句代码都清晰多了吧,一般别用这么复杂的写法吧。
      

  20.   

    [color=#FF0000]如何取第二个结果集的方法已解决。[/color]现在问题是如果将结果集的类型设为:TYPE_SCROLL_INSENSITIVE;
    只所以要用这个类型是因为可以用 isBeforeFirst() 方法来判断是否有记录;
      

  21.   

    如何取第二个结果集的方法已解决。现在问题是如果将结果集的类型设为:TYPE_SCROLL_INSENSITIVE;
    只所以要用这个类型是因为可以用 isBeforeFirst() 方法来判断是否有记录;
      

  22.   

    判断有记录直接用rs.next()就足够啦,例如boolean hasResult = rs.next();
    if(hasResult) {
        do {
           rs.getString(1);
        } while(rs.next());
    } else {
    //No Result
    }