Jaki jest najlepszy sposób uzyskania ostatniego wstawionego identyfikatora przy użyciu języka sqlite z języka Java? Google daje mi różne odpowiedzi - niektórzy mówią, wybierz ostatni-wstaw-rowid; inni mówią call statement.getGeneratedKeys(). Jaka jest najlepsza droga do pokonania? (Chcę tylko zwrócić identyfikator, nie używać go do innych wkładek lub czegokolwiek.)Jaki jest najlepszy sposób uzyskania ostatniego wstawionego identyfikatora przy użyciu języka sqlite z języka Java?
Odpowiedz
Użyj funkcji getGeneratedKeys(), jeśli obsługuje ją sterownik JDBC. Nie chcesz się obijać, próbując zdobyć klucz po wstawieniu. Jeśli twój sterownik nie obsługuje getGeneratedKeys(), to dostanę następną wartość z klucza przed wstawieniem.
Każda z metod wykonuje dokładnie tę samą instrukcję SQL, ale java.sql.Statement.getGeneratedKeys()
jest bardziej przenośna dla różnych baz danych.
Używanie funkcji API C sqlite3_last_insert_rowid()
lub funkcji SQL last_insert_rowid()
jest poprawnym sposobem pobrania wiersza wygenerowanego podczas ostatniego wstawienia.
SQLite obsługuje składni SQL scalar function jak:
SELECT function-name();
Dlatego też, jeśli nie masz dostępu do katalogu C API bezpośrednio, można wywołać funkcję skalarną last_insert_rowid()
poprzez SELECT
oświadczeniu.
Jeśli spojrzeć na source code na realizację SQLiteJDBC (jest to co używasz?) Widać, że to jest dokładnie to, co autor tej owijki JDBC uczynił:
ResultSet getGeneratedKeys() throws SQLException {
if (getGeneratedKeys == null) getGeneratedKeys = conn.prepareStatement(
"select last_insert_rowid();");
return getGeneratedKeys.executeQuery();
}
- 1. Najlepszy sposób uzyskania PK Guid wstawionego wiersza
- 2. Jaki jest najlepszy sposób uzyskania identyfikatora SID obecnego użytkownika?
- 3. SqlAlchemy: pobieranie identyfikatora ostatniego wstawionego rekordu
- 4. Usuwanie URL z tekstu przy użyciu języka Java
- 5. Parsowanie ciągów przy użyciu języka Python?
- 6. realizacji ekstrakcji sufiksu publiczny przy użyciu języka Java
- 7. jak wygenerować hash jak htpasswd Apache przy użyciu języka Java
- 8. Zmiana ustawień BIOS przy użyciu języka C
- 9. W interfejsie API GitHub - jaki jest najlepszy sposób uzyskania ostatniego komunikatu zatwierdzenia związanego z każdym plikiem?
- 10. Najlepszym sposobem znalezienia ostatniego wstawionego identyfikatora w mysql przy użyciu php
- 11. Statystyki języka Java
- 12. Jaki jest najlepszy sposób mapowania napędów systemu Windows za pomocą języka Python?
- 13. Przenoszenie z języka Cobol na język Java
- 14. Zmiana/zmiana języka Windows 7 przy użyciu java
- 15. Ograniczniki Postfix języka Java
- 16. W jaki sposób zaimplementowano metodę String # # języka Java?
- 17. zwijające minut do sufitu przy użyciu języka Java 8
- 18. Ustawianie języka napisów przy użyciu ffmpeg
- 19. Nie można wstawić byte [] do MySQL przy użyciu języka Java
- 20. Jak najlepiej zweryfikować połączenie klienta z elastycznym wyszukiwaniem przy użyciu języka Java?
- 21. Jaki jest najlepszy sposób uzyskania ostatniego znaku indeksowego w SQL 2008
- 22. Java 6: Przykłady implementacji własnego języka skryptowego przy użyciu javax.script?
- 23. Jak wywołać usługę sieci Web przy użyciu języka Java?
- 24. Wysyłanie załącznika wiadomości e-mail przy użyciu języka Java
- 25. Jak utworzyć kod QR przy użyciu języka Java (J2SE)
- 26. Jak sprawdzić, czy kolejka JMS istnieje przy użyciu języka Java?
- 27. Wyodrębnianie hierarchii katalogów przy użyciu języka go
- 28. Podłoża ciągu znaków przy użyciu języka Python
- 29. Where przy użyciu języka XML w SQL
- 30. Projekt języka Java z toString
w jaki sposób to "następna wartość z klucza przed wstawką" większa niż "największa wartość po wstawieniu"? Oba mają ten sam typ wyścigu i oba polegają na monotonicznych, pojedynczych przyrostach klucza. –
Założeniem jest, że klucz pobrany przed wstawieniem nie byłby oparty na zapytaniu tabeli docelowej, ale od jakiegoś kluczowego dostawcy. W kategoriach Oracle byłoby to Select sequence_name.nextval z dual. Nie znam szczegółów dla SQL Lite, ale niektóre wywołania api, które zwracają klucz w jego własnej autonomicznej transakcji całkowicie niezależnej od wstawki. Powiedział ... użyj getGeneratedKeys(). –
row = stmt.getGeneratedKeys(). GetInt (1); –