2011-12-03 27 views

Trả lời

6

Tuyên Bố vs PreparedStatement

  1. Hiệu suất có thể được tốt hơn với PreparedStatement nhưng phụ thuộc cơ sở dữ liệu.

  2. Với PreparedStatement bạn tránh SQL injection. How does a PreparedStatement avoid or prevent SQL injection?

  3. Kiểm tra loại tốt hơn với chuẩn bịStatement bởi setInt, setString trong đó câu lệnh bạn chỉ cần thêm vào SQL chính.

tương tự bài viết:

Difference between Statement and PreparedStatement

CallableStatement - Java câu trả lời cho StoredProcedures truy cập trên tất cả các cơ sở dữ liệu.

bài tương tự

CallableStatement vs Statement

Với PreparedStatement và Callable bạn đã có bộ nhớ đệm, cũng bộ nhớ đệm là một chủ đề lớn trong riêng của mình, bạn sẽ không muốn làm tất cả điều đó thay vì nhìn vào ehcache

Bạn hầu như luôn muốn sử dụng PreparedStatement trên Bảng sao kê

Nếu bạn phải vận hành qua StoredProcedure, bạn chỉ có một tùy chọn CallableStatement.

+0

"Với PreparedStatement và Callable bạn đã có bộ nhớ đệm". Là vậy sao?Theo tôi biết, bộ nhớ đệm chỉ dành cho các kế hoạch thực hiện SQL. Kết quả của các truy vấn không được lưu trữ bởi các cấu trúc này. – melihcelik

3

Tôi khuyên bạn nên sử dụng PreparedStatement khá nhiều bất cứ lúc nào bạn chuyển các tham số cho dù bạn có đang sử dụng lại câu lệnh hay không. Trong thực tế, tôi sử dụng PreparedStatement cho mọi thứ ngoại trừ các cuộc gọi thủ tục và để cho trình điều khiển DB và JDBC quyết định bộ nhớ cache và cách thức. Các cuộc gọi thủ tục nên sử dụng CallableStatement để xử lý việc thiếu cú ​​pháp cuộc gọi thủ tục cơ sở dữ liệu chéo nhất quán.

Trên PostgreSQL, trình điều khiển JDBC lưu trữ các câu lệnh chuẩn bị phía máy khách cho đến khi đạt đến một ngưỡng nhất định sử dụng lại. Vào thời điểm đó, một PREPARE phía máy chủ được ban hành và các hành động trong tương lai sử dụng câu lệnh chuẩn bị phía máy chủ và kế hoạch được lưu trữ của nó. Điều này có thể có một số ... thú vị ... và các hiệu ứng bất ngờ vì kế hoạch truy vấn dựa trên thống kê của PostgreSQL. Nếu bảng của bạn có phân phối giá trị nhất định (hoặc thiếu thống kê do thiếu ANALYZE, ngưỡng ngẫu nhiên sai_page_cost hoặc ngưỡng quá thấp), người lập kế hoạch có thể chọn một kế hoạch truy vấn khác và chậm hơn khi nó có tham số không xác định. nó đã biết giá trị thực tế bạn đang tìm kiếm. Nếu bạn gặp phải sự sụt giảm đột ngột và lớn trong các truy vấn sau lần lặp thứ 5 (theo mặc định) của một tuyên bố cụ thể, bạn có thể bị cắn bởi điều này và có thể làm việc xung quanh nó theo turning off server-side PREPARE trong PgJDBC. Đã có công việc liên tục để phát hiện các trường hợp sự cố trong máy chủ bằng cách kiểm tra xem một tham số cụ thể có số liệu thống kê rất khác với trường hợp giá trị không xác định, nhưng AFAIK nó chưa nhấn HEAD. Xem thêm this question. Tìm kiếm danh sách gửi thư chung pgsql và stackOverflow để biết thêm thông tin.

Các vấn đề liên quan