Usar claves generadas automáticamente

El controlador JDBC de Microsoft SQL Server 2005 admite las API de JDBC 3.0 opcionales para recuperar los identificadores de fila generados automáticamente. El valor principal de esta función 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 pseudocolumnas para los identificadores, las actualizaciones en que se debe usar la función de clave generada automáticamente deben funcionar en una tabla que contenga una columna IDENTITY. SQL Server permite una sola columna IDENTITY por tabla. El conjunto de resultados devuelto por el método getGeneratedKeys de la clase SQLServerStatement contiene tan sólo 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.

A modo de ejemplo, cree la siguiente tabla en la base de datos de ejemplo AdventureWorks de SQL Server 2005:

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

En el siguiente ejemplo, se pasa una conexión abierta a la base de datos modelo AdventureWorks a la función, se genera una instrucción SQL que agrega datos a la tabla y, a continuación, la instrucción se ejecuta y se muestra el valor de columna IDENTITY.

public static void executeInsertWithKeys(Connection con) {
   try {
      String SQL = "INSERT INTO TestTable (Col2, Col3) VALUES ('S', 50)";
      Statement stmt = con.createStatement();
      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.");
      }
      rs.close();
      stmt.close();
   }
   catch (Exception e) {
      e.printStackTrace();
   }
}

Vea también

Otros recursos

Usar instrucciones con el controlador JDBC