preparedStatement 新增sqlServer 无法获取主键id
时间: 2023-11-30 17:05:04 浏览: 64
在 SQL Server 中,获取自动生成的主键 ID 的方法与其他数据库略有不同。当使用 JDBC 的 PreparedStatement 执行 INSERT 操作时,可以通过传递一个额外的参数来指定要返回的自动生成的主键 ID。具体步骤如下:
1. 在 INSERT 语句中包含 OUTPUT 关键字,并将要返回的主键 ID 列名作为参数。
例如,假设你要向名为 users 的表中插入一条记录,并且该表的主键列名为 id,则插入语句可能如下所示:
```
INSERT INTO users (name, email) OUTPUT inserted.id VALUES (?, ?)
```
2. 使用 PreparedStatement 的 getGeneratedKeys() 方法获取生成的主键 ID。
例如,代码可能如下所示:
```
PreparedStatement pstmt = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
pstmt.setString(1, "John");
pstmt.setString(2, "john@example.com");
int affectedRows = pstmt.executeUpdate();
if (affectedRows == 0) {
throw new SQLException("Creating user failed, no rows affected.");
}
try (ResultSet generatedKeys = pstmt.getGeneratedKeys()) {
if (generatedKeys.next()) {
int id = generatedKeys.getInt(1);
System.out.println("Generated ID: " + id);
} else {
throw new SQLException("Creating user failed, no ID obtained.");
}
}
```
在这个示例中,我们首先将 PreparedStatement 的第二个参数设置为 Statement.RETURN_GENERATED_KEYS,以指示 JDBC 驱动程序返回生成的主键。然后,我们通过调用 executeUpdate() 方法来执行 INSERT 语句。如果该操作成功执行,则使用 getGeneratedKeys() 方法获取生成的主键 ID。最后,我们从 ResultSet 对象中获取生成的主键 ID 并将其打印到控制台上。
请注意,如果插入语句中有多个自动生成的主键,则可以使用多个参数来指定要返回的主键 ID 列名。
希望这可以帮助你解决问题。
阅读全文