pstmt=conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
然后处理完了ResultSet rsKey=pstmt.getGeneratedKeys(); //1
   rsKey.next();             //2
   int orderid = rsKey.getInt(1);//3
DEBUG结果是前面全没问题包括1,2两步都对的,并且rsKey.next()为TRUE。在执行第3步后跳到异常,提示
java.sql.SQLException: 无效的列类型: getInt not implemented for class oracle.jdbc.driver.T4CRowidAccessorat oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:111)
 at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:145)
 at oracle.jdbc.driver.Accessor.unimpl(Accessor.java:357)
 at oracle.jdbc.driver.Accessor.getInt(Accessor.java:467)
 at oracle.jdbc.driver.OracleReturnResultSet.getInt(OracleReturnResultSet.java:265)
.....
很郁闷,弄了一整天了。不知道怎么回事。望高手解答,万谢啊我补充一下,我的主键是seq_id.nextval这样插入的,

解决方案 »

  1.   

    通过seq_id.currval获取,oracle没有自动增长的字段,只有序列。
      

  2.   

    先把seq_id.nextval这个值取出来,或者直接写到你的SQL里面去
      

  3.   

    以前用过一次oracle的,它没有自增的,要通过序列来的,有点麻烦,我回去帮你找个例子看看
      

  4.   

    你确定你数据库中自增的序列是Int类型?改为Long或者与你数据库中数据匹配的类型。
      

  5.   

    给你写了个例子--1.部门表(t_part)
    create table t_part
    (
           p_id  number(8) primary key,   --部门编号(自增列)
           p_name varchar2(20),         --部门名称
           p_re varchar2(1000)     --部门介绍       
    )
    --创建seq_partid序列
    create sequence seq_partid
    start with 1
    nocache;
    --实现p_id 的自动增长
    create or replace trigger tri_partid
    before insert on t_part
    for each row
    begin
        select seq_partid.nextval into :new.p_id from dual;
    end; --插入数据
    insert into t_part values(7,'销售一部','销售好销售妙');
    insert into t_part values(0,'销售二部','销售好销售妙');
    添加的时候id就无所谓怎么填了