解决方案 »

  1.   

    楼主断点下,看着像是 ResultSet rs = stmt.executeQuery(sql); 这一行出的错。
    检查下sql   
    select col.column_name 
    from user_constraints con, user_cons_columns col 
    where con.constraint_name=col.constraint_name 
    and con.constraint_type='P' 
    and col.table_name='TTT_TEST'看是否sql语句有问题,将sql语句直接拿到oracle客户端去执行下,看能否出结果
    看错误,像是表名写错的样子
      

  2.   


    我把SQL语句直接在客户端执行,有结果的。表名就是ttt_test。我输出rs.toString(),也是有一串字符的。
      

  3.   

    打断点跟踪一下
    建议将代码改写为 while (rs.next()) {
        String primaryKey = rs.getString(1);
        System.out.println(primaryKey);
    }debug 看是哪行报的错误
      

  4.   

    报错的是String primaryKey = rs.getString(1);这一行,如果改为您说的那样,while里的就不会执行了。rs.next();为false。但是我把SQL语句拿到客户端是有结果的阿。
      

  5.   

    修改后,while里面的不会执行 是吧?
    不修改的话,可以执行,但是String primaryKey = rs.getString(1); 这一行报错?ResultSet rs = stmt.executeQuery(sql); 
    rs.last(); // 将光标移动到最后一行     
    int rowCount = rs.getRow(); // 得到当前行号,即结果集记录数  
    System.out.println(rowCount); 看看结果集有多少条记录
      

  6.   

    rs.last();这里报对只转发结果集的无效操作:last.
    是ResultSet rs = stmt.executeQuery(sql); 这一行没有执行吗?
      

  7.   

    原因是按照缺省方式打开的ResultSet不支持结果集cursor的回滚
    如果想要完成上述操作,要在生成Statement对象时加入如下两个参数:ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE
    stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);这样rs.last();就可以成功执行
    参考 对只转发结果集的无效操作: last 
    和 对只转发结果集的无效操作: last--这样的错误 然后再执行,获取到结果集的记录数看看
      

  8.   


    结果为0,并且有结果集已耗尽的异常。
    但是我把代码换成MYSQL不是oracle就可以正常执行?
      

  9.   

    jdbc 只是定义了接口,具体的实现都是由数据库自己去实现的,如果换成mysql可以正常执行,那可能跟数据库的具体实现有关系了。
    顺便问一下,楼主的这个sql语句主要想做什么事情,想实现什么呢?
      

  10.   

    刚将这个sql语句放到自己的环境中试了一下,没有问题。在oracle客户端和java代码中都可以拿到主键。
    下面的是通过java代码获取的结果值oracle.jdbc.driver.T4CConnection@47ad40
    select col.column_name from user_constraints con, user_cons_columns col where con.constraint_name=col.constraint_name and con.constraint_type='P' and col.table_name='MM_PUB_OFFER'
    OFFER_ID
      

  11.   

    问下,你用的是oracle的哪个版本?
      

  12.   

    select * from v$version;
    Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
    PL/SQL Release 11.2.0.3.0 - Production
    TNS for Linux: Version 11.2.0.3.0 - Production
    NLSRTL Version 11.2.0.3.0 - Productionoracle 11.2.0.3.0 我这边使用while (rs.next()) {
          String primaryKey = rs.getString(1);
          System.out.println(primaryKey);
    }也可以正常输出的,没有任何问题