如何在JDBC中获取插入ID?

如何在JDBC中获取插入ID?

回答:

如果它是自动生成的密钥,那么你可以使用Statement#getGeneratedKeys()它。你需要Statement使用与用于相同的名称进行调用INSERT。首先,你需要创建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,你可以在同一事务中直接在CallableStatementwith之后调用with RETURNING子句或SELECT CURRVAL(sequencename)(或执行此操作的任何特定于DB的语法)INSERT以获取最后生成的密钥.

以上是 如何在JDBC中获取插入ID? 的全部内容, 来源链接: utcz.com/qa/420848.html

回到顶部