Estoy usando Java (jdbc) para interactuar con una base de datos MySQL. Tengo una tabla con un índice primario que es AUTO INCREMENTO. Cuando inserto una fila, necesito obtener el índice que acaba de recibir. ¿Cómo puedo hacer eso?Obtener índice de filas insertadas de una base de datos MySQL
8
A
Respuesta
7
stmt.executeUpdate(
"INSERT INTO autoIncTutorial (dataField) "
+ "values ('Can I Get the Auto Increment Field?')",
Statement.RETURN_GENERATED_KEYS);
//
// Example of using Statement.getGeneratedKeys()
// to retrieve the value of an auto-increment
// value
//
int autoIncKeyFromApi = -1;
rs = stmt.getGeneratedKeys();
if (rs.next()) {
autoIncKeyFromApi = rs.getInt(1);
} else {
// throw an exception from here
}
rs.close();
rs = null;
0
alternativa, utilizando Spring JDBC que se vería así:
Map<String, Object> map = new HashMap<String, Object>();
map.put("column1", "test");
map.put("column2", Boolean.TRUE);
SimpleJdbcInsert insert = new SimpleJdbcInsert(template).withTableName("table").usingGeneratedKeyColumns("id");
int id = insert.executeAndReturnKey(map).intValue();
2
Gracias a John Boker por su excelente respuesta.
Si desea utilizar un PreparedStatement, todavía se puede utilizar RETURN_GENERATED_KEYS
, pero hay que aplicar los comandos de manera diferente:
PreparedStatement ps = mysql.prepareStatement(
"INSERT INTO myTable (colA, colB, colC) VALUES (?, ?, ?)",
Statement.RETURN_GENERATED_KEYS);
ps.setString(1, "My text");
ps.setTimestamp(2, new java.sql.Timestamp(new java.util.Date().getTime()););
ps.setInt(3, 5150);
ps.executeUpdate();
ResultSet results = ps.getGeneratedKeys();
results.next(); // Assume just one auto-generated key; otherwise, use a while loop here
System.out.println(results.getInt(1)); // there should only be 1 column in your results: the value of the auto-generated key
- Añadir el parámetro
RETURN_GENERATED_KEYS
en la funciónprepareStatement()
. - Obtener resultados no de
statement.executeUpdate()
pero destatement.getGeneratedKeys()
.
Cuestiones relacionadas
- 1. Cómo obtener el número de filas insertadas por una transacción
- 2. ¿Cómo obtengo la ID de varias filas insertadas en MySQL?
- 3. Obteniendo filas en una tabla de base de datos MySQL utilizando MySQL C API y C++
- 4. Devolución de filas insertadas en PostgreSQL
- 5. Cómo copiar una tabla de una base de datos mysql a otra base de datos mysql
- 6. mySQL - Copie las filas de una base de datos a otra con identificadores automáticos de incremento
- 7. Tamaños de índice en MySQL
- 8. ¿Cómo obtener el tamaño de la base de datos mysql?
- 9. Obtener el número de filas insertadas en ON DUPLICATE KEY UPDATE inserción múltiple?
- 10. Banderas en filas de una base de datos, mejores prácticas
- 11. ¿Cómo elimino una base de datos MySQL?
- 12. Obtener todas las filas seleccionadas de mysql en una matriz
- 13. Índice de una base de datos MySQL con Apache Lucene, y mantenerlos sincronizados
- 14. importación de base de datos MySQL
- 15. Obtener lista de filas duplicadas en MySQL
- 16. Error al tirar de la base de datos mysql en la base de datos mysql local
- 17. ¿Almacena datos de imagen en una base de datos MySQL?
- 18. Migrar una base de datos de desarrollo MySQL a una base de datos de producción
- 19. recuento exacto de todas las filas de la base de datos MySQL
- 20. Clonar base de datos MySQL
- 21. Número de filas en una base de datos SQLite
- 22. ¿cuántas filas hay en la tabla de la base de datos mysql?
- 23. Zend_Db: ¿Cómo obtener el número de filas de una tabla?
- 24. Seleccionar filas de la base de datos por strlen
- 25. MySQL obtener el número de filas en una tabla innodb
- 26. Exportación selectiva de base de datos MySQL
- 27. ¿Cómo agrego un índice único en un campo en una base de datos MySQL particionada?
- 28. Obtener filas de la cuadrícula de datos
- 29. ¿Cómo insertar múltiples filas en una base de datos mysql a la vez con declaraciones preparadas?
- 30. ¿Forma más rápida de conocer el número total de filas en la base de datos MySQL?
¿Cómo se puede utilizar este índice para buscar más rápido laster? – David
@David: ¿qué quieres decir? Una clave principal siempre es un índice y, por lo tanto, siempre ayudará a buscar más rápido si consulta el índice. Haga una pregunta por separado si quiere más explicaciones :) – Konerak
Pensé que una clave principal podría indexarse y no es un índice en sí mismo. Creo que es perfectamente válido (aunque generalmente no se recomienda) usar un varchar (60) como clave principal. Sería interesante recuperar el índice de la clave primaria que se acaba de insertar y no el valor en sí. Más específicamente, sería útil obtener algún tipo de posición en el disco donde se almacenó el último registro para que se pueda modificar rápidamente si resulta que se debe modificar (por ejemplo, debido a que el usuario hace clic en un botón para deshacer) . Espero no estar secuestrando este dibujo ahora ... – David