Clave primaria de la fila insertada jdbc?
Pregunta
¿Existe una forma de plataforma de base de datos cruzada para obtener la clave primaria del registro que acaba de insertar?
Observé que esta respuesta dice que puede obtenerlo llamando a SELECT LAST_INSERT_ID ()
y creo que puede llamar a SELECT @@ IDENTITY AS 'Identity';
hay una forma común de hacer esto en todas las bases de datos en jdbc?
Si no, ¿cómo sugeriría que implemente esto para un código que pueda acceder a cualquiera de SQL Server, MySQL y Oracle?
Solución
Copiado de mi código:
pInsertOid = connection.prepareStatement(INSERT_OID_SQL, Statement.RETURN_GENERATED_KEYS);
donde pInsertOid es una declaración preparada.
puede obtener la clave:
// fill in the prepared statement and
pInsertOid.executeUpdate();
ResultSet rs = pInsertOid.getGeneratedKeys();
if (rs.next()) {
int newId = rs.getInt(1);
oid.setId(newId);
}
Espero que esto te dé un buen punto de partida.
Otros consejos
respuesta de extraneon, aunque correcta, no funciona para Oracle .
La forma de hacer esto para Oracle es:
String key[] = {"ID"}; //put the name of the primary key column
ps = con.prepareStatement(insertQuery, key);
ps.executeUpdate();
rs = ps.getGeneratedKeys();
if (rs.next()) {
generatedKey = rs.getLong(1);
}
¿Has probado la Statement.executeUpdate () y ¿Los métodos Statement.getGeneratedKeys () ? Hay un artículo de developerWorks que menciona el enfoque.
Además, en JDBC 4.0 Sun agregó el función row_id que le permite obtener un identificador único en una fila. La característica es compatible con Oracle y DB2. Para el servidor sql, probablemente necesitará un controlador de terceros, como este .
¡Buena suerte!
para Oracle, Hibernate usa NEXT_VALUE de una secuencia si ha mapeado una secuencia para la generación de valor PKEY.
No estoy seguro de lo que hace para el servidor MySQL o MS SQL
Spring proporciona un soporte útil para esta operación y la guía de referencia parece responder a su pregunta:
No hay una única forma estándar de crear un apropiado PreparedStatement (que explica por qué la firma del método es la forma en que es). Un ejemplo que funciona en Oracle y puede no funcionar en otras plataformas es ...
He probado este ejemplo en MySQL y también funciona allí, pero no puedo hablar para otras plataformas.
Para las bases de datos que se ajustan a SQL-99, puede usar columnas de identidad: CREAR TABLA sometable (id INTEGER GENERADO SIEMPRE COMO IDENTIDAD (COMIENCE CON 101) CLAVE PRIMARIA, ...
Use getGeneratedKeys () para recuperar la clave que se acaba de insertar con executeUpdate (Cadena sql, int autoGeneratedKeys) . Use Statement.RETURN_GENERATED_KEYS para el segundo parámetro para ejecutarUpdate ()
Simplemente declare la columna de identificación como número entero de identificación, no como clave principal NULL auto_increment
después de esto ejecuta este código
ResultSet ds=st.executeQuery("select * from user");
while(ds.next())
{
ds.last();
System.out.println("please note down your registration id which is "+ds.getInt("id"));
}
ds.close();
el código anterior le mostrará la identificación de la fila actual
si elimina ds.last ()
, mostrará todos los valores de la columna de identificación