在JDBC中获取多列主键的生成密钥

时间:2015-12-30 15:14:10

标签: sql-server jdbc

我想从插入中获取生成的密钥。

我的代码:

stmt = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
ResultSet generatedKeys = stmt.getGeneratedKeys();
int columnCount = generatedKeys.getMetaData().getColumnCount();
if (generatedKeys.next()) {
    do {
        for (int i=1; i<=columnCount; i++) {
            String key = generatedKeys.getString(i);
            System.out.println("KEY " + generatedKeys.getMetaData().getColumnName(i) + " = " + key);
         }
     } while(generatedKeys.next());
}

这很好用。

我现在的问题是:当我有一个包含多个主键的表时,该值始终为null。为什么会这样?

1 个答案:

答案 0 :(得分:1)

getGeneratedKeys()方法用于返回数据库在插入具有单个“Identity”列(又名“AutoIncrement”,“AutoNumber”和可能的键值)的表时自动生成的键值由序列生成。)

根据JDBC驱动程序的实现细节,可能可以检索其他自动生成的主键值,例如,如果INSERT触发器分配了多列主键值或其他一些机制。但是,这并不是特别可能,当然也不是你可以信赖的东西。

当然,如果主键值是而不是自动生成(如你的情况那样),那么getGeneratedKeys()不返回任何东西就不足为奇了,因为什么都没有回来。