Ich verwende Java (jdbc), um mit einer MySQL-Datenbank zu interagieren. Ich habe Tabelle mit einem primären Index, der AUTO INCREMENT ist. Wenn ich eine Zeile einfüge, muss ich den Index erhalten, den er gerade erhalten hat. Wie mache ich das?Index von eingefügten Zeilen aus einer MySQL-Datenbank abrufen
8
A
Antwort
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
Alternativ ist es Frühling JDBC mit aussehen würde:
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
Dank für seine hervorragende Antwort auf John Boker.
Wenn Sie eine PreparedStatement nutzen möchten, können Sie immer noch RETURN_GENERATED_KEYS
verwenden, aber Sie müssen die Befehle gelten anders:
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
- Fügen Sie den
RETURN_GENERATED_KEYS
param in derprepareStatement()
Funktion. - Ergebnisse nicht von
statement.executeUpdate()
sondern vonstatement.getGeneratedKeys()
.
Verwandte Themen
- 1. Abrufen des Index einer eingefügten Zeile
- 2. Abrufen von Zeilen in DataView von seinem Index
- 3. Erfassen von eingefügten Textwerten aus mehreren Zeilen in einem Bericht
- 4. NSMutableDictionary repliziert den zuletzt eingefügten Index in jedem eingefügten Index anstelle des neuen Index
- 5. wie effizient Tausende von Zeilen aus einer gespeicherten Prozedur abrufen
- 6. Abrufen von Zeilen aus einer Spalte in sqlite
- 7. HTML-Codierung einer aus Word eingefügten Zeichenfolge
- 8. Abrufen der zuletzt eingefügten ID mit Mysql
- 9. Daten in den eingefügten Zeilen replizieren
- 10. Abrufen von Daten aus einer relationalen Datenbank
- 11. Abrufen von Daten aus einer vorbereiteten Anweisung
- 12. Abrufen von Spalte aus einer SQLalchemy-Beziehung
- 13. Abrufen von Zeilen in DB2
- 14. Alle Zeilen von SQLite abrufen
- 15. Abrufen von QComboBox-Index von QCompletion Popup
- 16. Solr: Abrufen von Feldnamen aus einem Solr-Index?
- 17. Abrufen von Zeilen aus der Tabelle über die Funktion
- 18. Wie schnell eine Anzahl von Zeilen aus dem Datenspeicher abrufen?
- 19. Abrufen einer Zeilennummer aus einer bestimmten Gruppe von Zeilen mit einem Self-Join JPA
- 20. Abrufen von Zeilen aus Tabellendaten mit Google App-Skript
- 21. Abrufen bestimmter Anzahl von Zeilen aus db mit nhibernate
- 22. SQL Weitere Zeilen von Aggregatfunktion abrufen
- 23. Wie erhalte ich mithilfe von ExecuteScalar die generierte ID aus einer eingefügten Zeile?
- 24. Abrufen einer Nummer aus der URL
- 25. Letzte n Zeilen von mysql innerhalb einer Schleife abrufen
- 26. Abrufen von Daten aus einer mySQL-Abfrage
- 27. Abrufen von Informationen aus einer Oracle-Datenbank
- 28. Abrufen von Werten aus einer Checkbox
- 29. Abrufen von Informationen aus einer Datenbank
- 30. Abrufen von Videos aus einer Wiedergabeliste
Wie können Sie diesen Index verwenden, um schneller laster zu suchen? – David
@David: was meinst du? Ein Primärschlüssel ist immer ein Index und hilft daher immer schneller zu suchen, wenn Sie den Index abfragen. Stellen Sie eine separate Frage, wenn Sie mehr Erklärungen wünschen :) – Konerak
Ich dachte, dass ein Primärschlüssel indiziert werden könnte und kein Index für sich ist. Ich glaube, dass es vollkommen gültig ist (obwohl normalerweise nicht empfohlen), ein varchar (60) als Primärschlüssel zu verwenden. Es wäre dann interessant, den Index des Primärschlüssels, der gerade eingefügt wurde, und nicht den Wert selbst abzurufen. Genauer gesagt wäre es nützlich, eine Position auf der Platte zu erhalten, auf der der letzte Datensatz gespeichert war, so dass man ihn schnell ändern kann, wenn sich herausstellt, dass er geändert werden sollte (zum Beispiel weil der Benutzer auf eine Schaltfläche zum Rückgängigmachen klickt). . Hoffe, dass ich dieses Profil jetzt nicht entführe ... – David