我想使用Java中的JDBC在数据库中插入一条记录(在我的例子中是Microsoft SQL Server)。同时,我想获得insert ID。如何使用jdbcapi实现这一点
如果是自动生成的密钥,则可以使用语句#getGeneratedKeys()用于此。您需要在与用于插入的语句相同的语句上调用它。您首先需要使用语句。返回生成的密钥以通知JDBC驱动程序返回密钥
以下是一个基本示例:
公共void创建(用户)抛出SQLException{
试一试(
Connection=dataSource.getConnection();
PreparedStatement语句=connection.prepareStatement(SQL\U插入,
语句。返回\u生成的\u键);
) {
语句.setString(1,user.getName());
语句.setString(2,user.getPassword());
statement.setString(3,user.getEmail());
// ...
int affectedRows=语句.executeUpdate();
if(affectedRows==0){
抛出新的SQLException(“创建用户失败,没有受影响的行”);
}
try(ResultSet generatedKeys=statement.getGeneratedKeys()){
if(generatedKeys.next()){
user.setId(generatedKeys.getLong(1));
}
否则{
抛出新的SQLException(“创建用户失败,未获得ID”);
}
}
}
}
注意,JDBC驱动程序是否工作取决于它。目前,大多数最新版本都可以工作,但如果我没有记错的话,Oracle JDBC驱动程序仍然有点麻烦。MySQL和DB2已经支持它很久了。PostgreSQL不久前开始支持它。我无法评论MSSQL,因为我从未使用过它
对于Oracle,您可以在同一事务中的INSERT之后直接使用RETURNING子句或SELECT CURRVAL(sequencename)(或任何特定于DB的语法)调用CallableStatement,以获取最后生成的密钥。另请参见这个答案