2009年2月27日星期五

获得AUTO_INCREMENT字段值

对于大多数在OO编程里执行insert操作,都要求返回刚插入记录的ID,而这个ID一般是AUTO_INCREMENT,如:
CREATE TABLE tab1 (
id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
name VARCHAR(64) NOT NULL,
PRIMARY KEY(id)
)
一般在Statement.executeUpdate执行insert语句时,返回影响的记录条数,就是1。但我们还需要得到ID值,返回给客户程序,刚刚插入的记录的ID(代表这个记录)。一般有几种办法:

1 在执行insert语句后,再执行SELECT @@IDENTITY AS ID 或 select last_insert_id() as id都是一样的。

2 ibatis做法和上面一样
<insert id="insertTab1">
insert into tab1
(name)
values
(#name#)
<selectKey resultClass="int" keyProperty="id" >
SELECT @@IDENTITY AS ID
</selectKey>
</insert>

3 通过Statment返回auto的值
pstmt = conn.prepareStatement("insert ...",Statement.RETURN_GENERATED_KEYS);
pstmt.setString(1, "name");
pstmt.executeUpdate();
rs = pstmt.getGeneratedKeys();
rs.next();
int id = rs.getInt(1);

没有评论: