如何在JDBC中获取插入ID?

问题:

我想要使​​用Java中的JDBC,在数据库(在我的情况下是Microsoft SQL Server)INSERT记录。同时,我想获取插入的ID。如何使用JDBC API来实现?

回答:

如果是自动生成的密钥,那么可以使用Statement#getGeneratedKeys()。您需要将其称为与INSERT使用的Statement相同的Statement。您首先需要使用Statement.RETURN_GENERATED_KEYS创建语句来通知JDBC驱动程序返回键。
这是一个基本的例子:

public void create(User user) throws SQLException {
    try (
        Connection connection = dataSource.getConnection();
        PreparedStatement statement = connection.prepareStatement(SQL_INSERT,
                                      Statement.RETURN_GENERATED_KEYS);
    ) {
        statement.setString(1, user.getName());
        statement.setString(2, user.getPassword());
        statement.setString(3, user.getEmail());
        // ...

        int affectedRows = statement.executeUpdate();

        if (affectedRows == 0) {
            throw new SQLException("Creating user failed, no rows affected.");
        }

        try (ResultSet generatedKeys = statement.getGeneratedKeys()) {
            if (generatedKeys.next()) {
                user.setId(generatedKeys.getLong(1));
            }
            else {
                throw new SQLException("Creating user failed, no ID obtained.");
            }
        }
    }
}

请注意,您是否依赖于JDBC驱动程序是否可用。目前,大部分最后的版本都会做,但是如果我是正确的,那么Oracle JDBC驱动程序仍然有点麻烦。 MySQL和DB2已经支持年龄。 PostgreSQL很早就开始支持。我从来没有使用过关于MSSQL的措辞。
对于Oracle,您可以在同一事务中的INSERT之后直接调用RETURNING子句或SELECT CURRVAL(sequencename)(或任何特定于DB的语法)CallableStatement以获取最后生成的密钥。另见this answer

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: How to get the insert ID in JDBC?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

− 1 = 5