Microsoft JDBC Driver for SQL Server 支持可选的 JDBC 3.0 API 以检索自动生成的行标识符。 此功能的主要价值是提供一种方式,将 IDENTITY 值提供给正在更新数据库表的应用程序,而无需进行查询,也无需第二次往返服务器。
由于 SQL Server 不支持伪列标识符,使用自动生成密钥功能的更新必须对包含IDENTITY列的表进行操作。 SQL Server 每个表仅允许有一个 IDENTITY 列。
SQLServerStatement 类的 getGeneratedKeys 方法返回的结果集只有一列,列名GENERATED_KEYS为 。 自 JDBC Driver 13.6 起,如果为不生成 IDENTITY 值的语句请求生成的键,驱动程序会返回一个非 null 的空结果集,并且 ResultSet.next() 会返回 false。
例如,在 AdventureWorks2025 示例数据库中创建下表:
CREATE TABLE TestTable
(Col1 int IDENTITY,
Col2 varchar(50),
Col3 int);
在下面的示例中,将打开到 AdventureWorks2025 示例数据库的连接传递给函数,构造一个 SQL 语句,用于向表添加数据,然后运行该语句并 IDENTITY 显示列值。
public static void executeInsertWithKeys(Connection con) {
try(Statement stmt = con.createStatement();) {
String SQL = "INSERT INTO TestTable (Col2, Col3) VALUES ('S', 50)";
int count = stmt.executeUpdate(SQL, Statement.RETURN_GENERATED_KEYS);
ResultSet rs = stmt.getGeneratedKeys();
ResultSetMetaData rsmd = rs.getMetaData();
int columnCount = rsmd.getColumnCount();
if (rs.next()) {
do {
for (int i=1; i<=columnCount; i++) {
String key = rs.getString(i);
System.out.println("KEY " + i + " = " + key);
}
} while(rs.next());
}
else {
System.out.println("NO KEYS WERE GENERATED.");
}
}
// Handle any errors that may have occurred.
catch (SQLException e) {
e.printStackTrace();
}
}