2011-02-04 16 views

Respuesta

19

No es necesario utilizar un SQL específico de DBMS para eso.

Eso es lo que getGeneratedKeys() es para.

Cuando preparing your statement se pasa el nombre (s) de las columnas generadas automáticamente que luego se puede recuperar usando getGeneratedKeys()

 
PreparedStatement pstmt = connection.prepareStatement(
    "insert into some_table (col1, col2, ..) values (....)", 
     new String[] { "ID_COLUMN"}); 

pstmt.executeUpdate(); 

ResultSet rs = pstmt.getGeneratedKeys(); // will return the ID in ID_COLUMN 

+0

sólo quiero confirmar esto, pensó que yo estoy 99% seguro, ¿esto aún devuelve el valor deseado de la columna generada automáticamente incluso si se han ejecutado varias instrucciones de inserción en el tiempo entre la inserción y la obtención del valor de la columna con 'getGeneratedKeys()' –

2

Es posible que pueda obtener lo que está buscando utilizando la función IDENTITY_VAL_LOCAL. (Derby Reference)

Se supone que esta función devuelve "el valor asignado más recientemente de una columna de identidad para una conexión, donde la asignación se produjo como resultado de una instrucción INSERT de una sola fila con una cláusula VALUES".

Vale la pena señalar que esta función devolverá DECIMAL (31,0), independientemente del tipo de datos reales de la columna de identidad correspondiente.

Además, este solo funciona para inserciones de una sola fila que contienen una cláusula VALUES.

Cuestiones relacionadas