使用@JdbcInsert时检索自动增量值

时间:2013-02-20 10:10:30

标签: jdbc xpages xpages-extlib xpages-ssjs

我正在尝试在DB2数据库表中存储一行,其中主键是自动增量。这样可以正常工作,但是我无法在成功插入行后如何检索主键值以进行进一步处理。你是如何实现这一目标的? @JdbcInsert仅返回插入的行数...

2 个答案:

答案 0 :(得分:1)

由于似乎没有办法用SSJS(至少对我来说)这样做,我将这个特定的逻辑从我的SSJS控制器移动到我为JDBC相关任务创建的Java帮助器bean。 Statement能够回送生成的密钥(使用方法 executeUpdate())。所以我仍然通过@JdbcGetConnection创建我的连接,然后将其交给bean。这是bean的有趣部分:

/**
 * SQL contains the INSERT Statement
 */    
public int executeUpdate(Connection conn, String SQL){

  int returnVal;
  Statement stmt = conn.createStatement();

  stmt.executeUpdate(SQL,
    Statement.RETURN_GENERATED_KEYS);

  if(!conn.getAutoCommit()) conn.commit();

  ResultSet keys = stmt.getGeneratedKeys();

  if(keys.next()){
    returnVal = keys.getInt(1);
  } else {
    returnVal = -1;
  }

  return returnVal;
}

如果一次插入多行,则需要更改密钥检索处理。

答案 1 :(得分:0)

在较新的DB2版本中,您可以将每个Insert转换为Select以获取自动生成的键列。一个例子是:

从Final Table中选择keycol(插入表(col1,col2)值(?,?))

keycol是您的标识列的名称

Select可以使用与常规查询相同的@Function执行。