我想在Java中使用JDBC在数据库中创建一条记录(在我的例子中是Microsoft SQL Server).同时,我想获得insert ID.如何使用JDBC API实现这一点?
我想在Java中使用JDBC在数据库中创建一条记录(在我的例子中是Microsoft SQL Server).同时,我想获得insert ID.如何使用JDBC API实现这一点?
如果它是自动生成的密钥,那么您可以为此使用Statement#getGeneratedKeys()
.您需要在与INSERT
相同的Statement
上呼叫它.您首先使用need创建语句,使用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不久前开始支持它.我无法 comments MSSQL,因为我从未使用过它.
对于Oracle,您可以在同一事务中的INSERT
之后直接调用带有RETURNING
子句的CallableStatement
或SELECT CURRVAL(sequencename)
(或任何特定于DB的语法),以获取最后生成的密钥.另见第this answer页.