2011-12-03 12 views

Odpowiedz

6

komunikat vs PreparedStatement

  1. Wydajność może być lepiej z PreparedStatement ale to baza danych zależne.

  2. Dzięki PreparedStatement unikasz iniekcji SQL. How does a PreparedStatement avoid or prevent SQL injection?

  3. 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.

+0

"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

3

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.