Compartir vía


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 un método de modo que los valores IDENTITY estén disponibles para la aplicación que actualiza la tabla de base de datos sin necesidad de una consulta y un segundo ciclo de ida y vuelta en el servidor.

Dado que SQL Server no admite seudocolumnas para los identificadores, las actualizaciones en las que se debe usar la característica de clave generada automáticamente deben funcionar en una tabla que contenga una columna IDENTITY. SQL Server solo permite una única columna IDENTITY 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 las claves generadas se solicitan en una tabla que no contiene la columna IDENTITY, el controlador JDBC devuelve un conjunto de resultados con valores nulos.

Cree, a modo de ejemplo, el siguiente tabla en la base de datos de ejemplo AdventureWorks2022:

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 AdventureWorks2022 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 valor de la columna 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();
    }
}

Consulte también

Empleo de instrucciones con el controlador JDBC