Microsoft JDBC Driver for SQL Server 支持可选的 JDBC 3.0 API 以检索自动生成的行标识符。 这项功能的主要意义在于,为更新数据库表的应用程序提供获得 IDENTITY 值的方法,从而无需执行查询以及对服务器进行再次往返通信。
由于 SQL Server 不支持标识符的伪列,因此必须使用自动生成键功能的更新,必须对包含 IDENTITY 列的表进行操作。 SQL Server 仅允许每个表包含一个 IDENTITY 列。 SQLServerStatement 类的 getGeneratedKeys 方法返回的结果集仅包含一列,并且返回的列名为 GENERATED_KEYS。 如果对不包含 IDENTITY 列的表请求生成的键,则 JDBC 驱动程序将返回空结果集。
作为示例,在 AdventureWorks2022 示例数据库中创建下表:
CREATE TABLE TestTable
   (Col1 int IDENTITY,
    Col2 varchar(50),
    Col3 int);  
在以下示例中,将打开到 AdventureWorks2022 示例数据库的连接传递给函数,构造一个 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();
    }
}