日期:2014-05-17  浏览次数:20794 次

获得插入当前行数据的自动增长字段的值
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.T4CRowidAccessor

at 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这样插入的,

------解决方案--------------------
先把seq_id.nextval这个值取出来,或者直接写到你的SQL里面去
------解决方案--------------------
以前用过一次oracle的,它没有自增的,要通过序列来的,有点麻烦,我回去帮你找个例子看看
------解决方案--------------------
给你写了个例子。。。

--1.部门表(t_part)
create table t_part
(
       p_id  number(8) primary key,   --部门编号(自增列)
       p_name varchar2(20),         --部门名称
       p_remark 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就无所谓怎么填了