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