gpt4 book ai didi

java - JDBC中如何获取插入ID?

转载 作者:行者123 更新时间:2023-12-02 02:33:34 27 4
gpt4 key购买 nike

我想使用 Java 中的 JDBC 在数据库(在我的例子中是 Microsoft SQL Server)中INSERT一条记录。同时我想获取插入ID。如何使用 JDBC API 实现此目的?

最佳答案

如果是自动生成的 key ,则可以使用Statement#getGeneratedKeys()为了这。您需要在与用于 INSERT 的语句相同的 Statement 上调用它。您首先需要使用 Statement.RETURN_GENERATED_KEYS 创建语句通知 JDBC 驱动程序返回 key 。

这是一个基本示例:

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,您可以使用 RETURNING 子句或 SELECT CURRVAL(sequencename)(或任何特定于数据库的语法)调用 CallableStatement这样做)直接在同一事务中的 INSERT 之后获取最后生成的 key 。另请参阅this answer .

关于java - JDBC中如何获取插入ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57217501/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com