Using Sybase Identity

来源:互联网 发布:斗龙战士4玩具淘宝 编辑:程序博客网 时间:2024/06/05 15:08

We can get generated identity key by following java code:

rs = stmt.executeQuery("select @@identity");

int key = -1;

if (rs.next())

    key = rs.getInt(1);

-------------------------

In  comming JDBC 3.0 , we can use Statement.getGenerateKeys to fecth the odometer. But it's not support yet in our jconn5.5

@@IDENTITY 返回最后一个插入 IDENTITY 的值,这些操作包括:INSERT, SELECT INTO,或者 bulk copy。如果在给没有 IDENTITY 列的其他表插入记录,系统将其置为 null。如果有多行记录插入到 IDENTITY 表中,@@IDENTITY 表示最后一个产生的值。如果触发了某个触发器,并且这个触发器执行向另一个带有 IDENTITY 列的表的插入操作,@@IDENTITY 将返回这个由触发器产生的值。如果这个触发器插入的表中不包含 IDENTITY 列,那么 @@IDENTITY 将为 null。如果插入操作失败,@@IDENTITY 值依然会增加,所以 IDENTITY 不保证数据的连续性。

 

@@IDENTITY 是当前连接的全局变量,只对当前连接有效。也就是说,如果断开连接再重新连接后,@@IDENTITY 为 null。以 ADO 来说,@@IDENTITY 在 Connection 对象打开和关闭期间是有意义的,即在 Connection 对象的存在范围内有效。在 MTS 组件中,从打开连接到显式的关闭连接(Connection.Close)或者到调用了 SetAbort,SetComplete之前,在这期间,@@IDENTITY 有意义。使用 Truncate table 语句会使 IDENTITY 列重新开始计算。  

String sql = "insert into tempdb..tmp_iden (value) values (?) /nselect @@identity";
  PreparedStatement ps = conn.prepareStatement(sql);
  ps.setInt(1, 3);
  ResultSet rs = ps.executeQuery();

  int key = -1;
  if (rs.next())
    key = rs.getInt(1);

 

 

原创粉丝点击