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?

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top