Używam Java (jdbc) do interakcji z bazą danych MySQL. Mam tabelę z głównym indeksem, który jest AUTO INCREMENT. Kiedy wstawiam wiersz, potrzebuję uzyskać indeks, który właśnie otrzymał. Jak mogę to zrobić?Uzyskiwanie indeksu wstawionych wierszy z bazy danych MySQL
8
A
Odpowiedz
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
Alternatywnie, przy użyciu Wiosna JDBC to będzie wyglądać:
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
Dzięki John Boker za doskonałą odpowiedź.
Jeśli chcesz użyć PreparedStatement, można nadal korzystać RETURN_GENERATED_KEYS
, ale trzeba zastosować polecenia inaczej:
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
- Dodaj
RETURN_GENERATED_KEYS
param w funkcjiprepareStatement()
. - Uzyskaj wyniki nie od
statement.executeUpdate()
, ale odstatement.getGeneratedKeys()
.
Powiązane problemy
- 1. Uzyskiwanie liczby wierszy wstawionych dla WŁĄCZENIA DUPLIKOWANEJ WIELKIEJ AKTUALNEJ Wstawki?
- 2. ile wierszy w tabeli bazy danych mysql?
- 3. Zwracanie wstawionych wierszy w PostgreSQL
- 4. Jak uzyskać identyfikator wielu wstawionych wierszy w MySQL?
- 5. Uzyskiwanie znaków specjalnych z bazy danych MySQL za pomocą PHP
- 6. Uzyskiwanie wartości wielu wierszy z tabeli MySQL
- 7. Python MySQL: Nie pokazuje wstawionych rekordów
- 8. Tworzenie indeksu bazy danych z Entity Framework
- 9. Pobieranie ostatnich wstawionych identyfikatorów dla wielu wierszy
- 10. Schemat bazy danych MySQL
- 11. Normalizacja bazy danych MySQL
- 12. Uzyskiwanie kodowania bazy danych Postgres
- 13. Uzyskiwanie liczby wierszy dla tabeli w MySQL?
- 14. Sync bazy danych sqlite z mysql
- 15. Eksport bazy danych MySQL z XAMPP
- 16. czytanie obrazu BLOB z bazy danych MySQL
- 17. tworzenie bazy danych w mysql z java
- 18. mapa istniejącej bazy danych mysql z gorm
- 19. Uzyskiwanie indeksu obiektu z NSArray?
- 20. Pandon Pythas: Jak uzyskać nazwy wierszy z indeksu ramki danych?
- 21. Poczta do bazy danych MySQL
- 22. Pobierania wierszy w tabeli bazy danych MySQL za pomocą MySQL C API i C++
- 23. Uzyskiwanie podobnej długości i szerokości geograficznej z bazy danych
- 24. Importowanie dużą csv do bazy danych mysql
- 25. Jak odzyskać wszystkie ostatnio wstawione identyfikatory wierszy w mysql-php?
- 26. Czy dowolne bazy danych obsługują automatyczne tworzenie indeksu?
- 27. uzyskiwanie wartości bazy danych przy użyciu get_object_or_404
- 28. Odzyskiwanie bazy danych mysql z kopii zapasowej folderu danych
- 29. Synchronizacja bazy danych klienta SQLite z bazą danych serwera MySQL
- 30. Uzyskiwanie pełnej kopii bazy danych WHOIS
Jak wykorzystać ten indeks, aby szybciej wyszukiwać szybciej? – David
@ David: co masz na myśli? Klucz podstawowy jest zawsze indeksem, a zatem zawsze pomoże szybciej wyszukiwać, jeśli zapytanie dotyczy indeksu. Zadaj osobne pytanie, jeśli chcesz więcej wyjaśnień :) – Konerak
Myślałem, że klucz podstawowy może być indeksowany i nie jest indeksem sam w sobie. Uważam, że jest to całkowicie poprawne (choć zazwyczaj niezalecane) używanie varcharu (60) jako klucza podstawowego. Interesujące byłoby wówczas pobranie indeksu klucza podstawowego, który właśnie został wstawiony, a nie samej wartości. Dokładniej, byłoby przydatne, aby uzyskać jakąś pozycję na dysku, na którym przechowywany był ostatni rekord, aby można było go szybko zmodyfikować, jeśli okaże się, że powinien on zostać zmodyfikowany (na przykład z powodu kliknięcia przez użytkownika przycisku cofania) . Mam nadzieję, że teraz nie uprowadzam tego bieżnika ... – David