慕姐4208626
如果它是自动生成的密钥,则可以使用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,可以调用CallableStatement带着RETURNING条款或aSELECT CURRVAL(sequencename)(或执行此操作的任何特定于DB的语法)INSERT在同一事务中获取最后生成的密钥。