使用自动生成的密钥

下载 JDBC 驱动程序

Microsoft JDBC Driver for SQL Server 支持可选的 JDBC 3.0 API 以检索自动生成的行标识符。 此功能的主要价值是提供一种方式,将 IDENTITY 值提供给正在更新数据库表的应用程序,而无需进行查询,也无需第二次往返服务器。

由于 SQL Server 不支持用于标识符的伪列,因此,必须使用自动生成键功能的更新操作只能对包含 IDENTITY 列的表执行。 SQL Server 每个表仅允许有一个 IDENTITY 列。 SQLServerStatement 类的 getGeneratedKeys 方法返回的结果集仅包含一列,并且返回的列名为 GENERATED_KEYS。 如果在没有 IDENTITY 列的表上请求生成的密钥,JDBC 驱动程序将返回 null 结果集。

例如,在 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();
    }
}

另请参阅

将 Statement 语句与 JDBC 驱动程序结合使用