使用自动生成键

下载 JDBC 驱动程序

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();
    }
}

另请参阅

通过 JDBC 驱动程序使用语句