Zastanawiam się, jakie są różnice i kiedy używać Statement
, PreparedStatement
i CallableStatement
.JDBC - Statement, PreparedStatement, CallableStatement i caching
Jaka jest najlepsza praktyka i typowy scenariusz korzystania z każdego z nich?
Zastanawiam się, jakie są różnice i kiedy używać Statement
, PreparedStatement
i CallableStatement
.JDBC - Statement, PreparedStatement, CallableStatement i caching
Jaka jest najlepsza praktyka i typowy scenariusz korzystania z każdego z nich?
komunikat vs PreparedStatement
Wydajność może być lepiej z PreparedStatement ale to baza danych zależne.
Dzięki PreparedStatement unikasz iniekcji SQL. How does a PreparedStatement avoid or prevent SQL injection?
Lepsze sprawdzanie typu za pomocą readyStatement przez setInt, setString gdzie jako instrukcja po prostu dołączasz do głównego SQL.
podobnym stanowisku:
Difference between Statement and PreparedStatement
CallableStatement - Java odpowiedź storedprocedures dostępowych we wszystkich bazach danych.
podobnym stanowisku
CallableStatement vs Statement
Z PreparedStatement i wymagalne masz już buforowanie, również buforowanie jest wielkim tematem w jej postaci własnej, nie chce zrobić wszystko, że zamiast patrzeć na ehcache
Powinieneś zawsze preferować PreparedStatement zamiast Oświadczenia
Jeśli musisz operować na StoredProcedure, masz tylko jedną opcję CallableStatement.
Polecam używanie PreparedStatement praktycznie za każdym razem, gdy przekażesz parametry, niezależnie od tego, czy będziesz ponownie używał instrukcji. W praktyce używam PreparedStatement do wszystkiego oprócz wywołań procedur i pozwalam sterownikowi DB i JDBC decydować, co należy buforować i jak. Wywołania procedur powinny używać CallableStatement do obsługi braku spójnej składni wywołania procedury bazy danych między bazami danych.
W PostgreSQL sterownik JDBC buforuje przygotowane instrukcje po stronie klienta, aż do osiągnięcia pewnego progu ponownego użycia. W tym momencie zostanie wydane polecenie PREPARE po stronie serwera, a przyszłe wykonania będą korzystać z instrukcji przygotowanej po stronie serwera i jej planu buforowanego. Może to mieć ... interesujące ... i nieoczekiwane efekty z powodu opartego na statystyce PostgreSQL narzędzia do planowania zapytań. Jeśli twoja tabela ma określone rozkłady wartości (lub złe statystyki z powodu braku ANALYZE, nieprawidłowego parametru random_page_cost lub zbyt niskiego progu statystyk), planista może wybrać inny i wolniejszy plan zapytania, jeśli ma nieznany parametr do tego, co by wybrał, gdyby znał rzeczywistą wartość, której szukałeś. Jeśli napotkasz nagłe i masowe spowolnienie zapytań po piątym (domyślnie) powtórzeniu danej instrukcji, możesz zostać przez nią ukąszony i możesz obejść go przez turning off server-side PREPARE w PgJDBC. Trwają prace nad wykrywaniem tych problemów na serwerze poprzez sprawdzenie, czy dany parametr ma bardzo różne statystyki do przypadku o nieznanej wartości, ale AFAIK nie trafił jeszcze HEAD. Zobacz także this question. Wyszukaj ogólną listę mailingową pgsql i stackOverflow, aby uzyskać więcej informacji.
"Z PreparedStatement i Callable już masz buforowanie". Czy tak jest?O ile mi wiadomo, buforowanie jest tylko dla planów wykonania SQL. Wyniki zapytań nie są buforowane przez te struktury. – melihcelik