日期:2014-05-16  浏览次数:20429 次

获取最新插入的记录主键
当向数据库插入一条新记录后通常都需要获取新记录的主键.

而每种数据库的主键生成策略都不同.

一般来讲, 如果让数据库来维护主键, MySQL 和 SQL Server 为自动增长, Oracle 使用序列

若使用 Hibernate , 其 save() 方法会返回一个 Serializable. 此值为 持久化标识(identifier) 即主键对应的属性.
merge() 方法将 持久化的对象 整个返回.

若使用 jdbc , 可以使用 Statement 的 getGeneratedKeys() 方法获取最新插入数据的结果集.
但要保证一点,
必须与 insert 语句在同一个 Connection 中. 具体情况查看 Statement API 帮助的 executeUpdate(sql, Statement.RETURN_GENERATED_KEYS) 和 getGeneratedKeys() 方法说明;

若数据库驱动程序不支持上面的方法. 那就只能使用数据库本身的方法了

统计了一下:

Oracle      SELECT sequence.currval FROM DUAL
MySQL       SELECT LAST_INSERT_ID()
SqlServer   SELECT SCOPE_IDENTITY()或SELECT @@IDENTITY

PostgreSQL  SELECT nextval('<TABLE>_SEQ')
DB2         IDENTITY_VAL_LOCAL()
Informix    SELECT dbinfo('sqlca.sqlerrd1') FROM <TABLE>
Sybase      SELECT @@IDENTITY
HsqlDB      CALL IDENTITY()
Cloudscape  IDENTITY_VAL_LOCAL()
Derby       IDENTITY_VAL_LOCAL()


使用以上语句查询时, 必须保证与 插入语句在同一个 Connection 中