Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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.
Como SQL Server no soporta pseudocolumnas para identificadores, las actualizaciones que usan la función de clave generada automáticamente deben operar sobre 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 tiene solo una columna, con el nombre GENERATED_KEYSde columna . A partir del controlador JDBC 13.6, si se solicitan claves generadas para una sentencia que no genera un IDENTITY valor, el controlador devuelve un conjunto de resultados vacío y no nulo y ResultSet.next() devuelve false.
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();
}
}