Luôn sử dụng "chuẩn bị" sẽ tương đương với standardStatement nhưng tên hàm chính xác sẽ phụ thuộc vào kết hợp cơ sở dữ liệu và trình điều khiển của bạn.
Những lợi thế của một tuyên bố chuẩn bị trên một thực (String) rất nhiều: -
Tuyên bố được phân tách và một kế hoạch truy cập determind chỉ một lần khi "chuẩn bị" tuyên bố được thực thi. Tùy thuộc vào số lần bạn chạy câu lệnh này có thể dẫn đến hiệu suất tốt hơn nhiều.
Bạn không cần phải lo lắng về các ký tự đặc biệt trong dữ liệu chuỗi khi bạn chuyển nó qua setString(). Trong một thực thi (String) bất kỳ dấu nháy đơn hoặc dấu chấm phẩy nào trong dữ liệu sẽ dẫn đến lỗi phân tích cú pháp.
Tệ hơn nữa là cách hoạt động của "tấn công sql injection". Nếu một chuỗi giống như "x" từ cust_table ; xóa khỏi lệnh _ bảng ; chọn "được nhập dưới dạng dữ liệu mà nó có thể dẫn đến lệnh xóa được phân tích cú pháp và thực hiện.
Xử lý các số hiệu quả hơn nhiều. Một cuộc gọi setInt lấy một giá trị số nguyên như là đối với chuỗi SQL equvalent mà bạn phải chuyển đổi thành các ký tự thì DBMS phải chuyển đổi nó trở về một số nguyên.
Dễ đọc. Bạn viết mã một câu lệnh SQL với một vài dấu hỏi, trong đó các biến đi tương đối dễ đọc, trái ngược với phân tích cú pháp về tinh thần và phân tích một chuỗi các sự kết hợp chuỗi sẽ gây thêm tiếng ồn cho các dấu ngoặc kép đã thoát ...
Tuy nhiên, vài trường hợp thực thi (String) thực sự tốt hơn.
Trường hợp khóa của bạn được phân phối rất không đồng đều. VÍ DỤ. Nếu 95% khách hàng của bạn sống ở Hoa Kỳ và bạn muốn liệt kê 4% người sống ở Canada thì "nơi quốc gia =?" thường sẽ dẫn đến việc quét không gian bảng trong khi với "where country = 'CA'" bạn có một số cơ hội sử dụng chỉ mục.
Trường hợp còn lại là nơi người dùng có thể nhập hoặc bỏ qua một số tiêu chí tìm kiếm. Tốt hơn hết là xây dựng một chuỗi SQL cho các tiêu chí mà bạn đã đưa ra hơn là xây dựng một truy vấn phức tạp mà đối phó với tất cả các hoán vị có thể có của các tiêu chí đầu vào.
Nguồn
2009-01-05 13:42:39
cảm ơn, cách ngăn chặn trong C++? – yesraaj
Không có ý tưởng, C + + không phải là tách trà của tôi. :) – Bombe