Empleo de claves generadas automáticamente

Descargar controlador JDBC

Microsoft JDBC Driver para SQL Server admite las API de JDBC 3.0 opcionales para recuperar los identificadores de fila generados automáticamente. El valor principal de esta característica es proporcionar una manera de hacer que IDENTITY los valores estén disponibles para una aplicación que está actualizando una tabla de base de datos sin necesidad de una consulta y un segundo recorrido de ida y vuelta al servidor.

Dado que SQL Server no admite pseudo columnas para identificadores, las actualizaciones que tienen que usar la característica de clave generada automáticamente deben funcionar con una tabla que contenga una IDENTITY columna. SQL Server solo permite una sola IDENTITY columna por tabla. El conjunto de resultados devuelto por el método getGeneratedKeys de la clase SQLServerStatement contiene tan solo una columna y se devuelve el nombre de columna GENERATED_KEYS. Si se solicitan claves generadas en una tabla que no tiene ninguna IDENTITY columna, el controlador JDBC devolverá un conjunto de resultados NULO.

Por ejemplo, cree la tabla siguiente en la base de datos de ejemplo AdventureWorks2025:

CREATE TABLE TestTable
   (Col1 int IDENTITY,
    Col2 varchar(50),
    Col3 int);  

En el ejemplo siguiente, se pasa una conexión abierta a la base de datos de ejemplo AdventureWorks2025 a la función , se construye una instrucción SQL que agregará datos a la tabla y, a continuación, se ejecuta la instrucción y se muestra el IDENTITY valor de columna.

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

Consulte también

Uso de instrucciones con el controlador JDBC