2011-11-26 24 views
5

Tôi giải thích bản thân mình ...Làm thế nào để điền vào một sql truy vấn với nhiều tham số tùy chọn trong PreparedStatement?

Tôi có một mẫu với điền các truy vấn (ví dụ.):

SELECT * 
FROM table 
WHERE id=? AND name=? AND sex=? AND year=? AND class=? 

nhưng chỉ có "id" là bắt buộc, tất cả các tham số khác là không bắt buộc. Làm cách nào để tôi có thể điền (hoặc tạo lại) câu lệnh có sẵn cho truy vấn đó ???

Trả lời

6

Bạn sẽ phải sử dụng nhiều câu lệnh đã chuẩn bị hoặc chỉ cần tạo câu lệnh khi đang di chuyển, kiểm tra tham số nào bạn có.

Như thế này:

String query = "SELECT * FROM table WHERE id=?"; 
if(nameParameter != null) { 
    query += " AND name=?"; //don't never ever directly add the value here 
} 
... 

Cập nhật/Cảnh báo: Không trực tiếp thêm các giá trị tham số để các chuỗi truy vấn nhưng sử dụng PreparedStatement và những thứ tương tự để thay thế. Như được hiển thị phía trên chuỗi truy vấn chỉ nên chứa trình giữ chỗ cho các giá trị (ví dụ: ?) để ngăn chặn các cuộc tấn công SQL injection.

Những gì tôi có nghĩa là, KHÔNG làm sau:

if(nameParameter != null) { 
    //NEVER EVER, REALLY I MEAN IT, DON'T DO THIS 
    query += " AND name='" + nameParameter + "'"; 
} 
+0

tks ... Đó là cách mà tôi sử dụng, nó dường như là "sạch" cách –

+0

Tôi biết có những khuôn khổ ra ở đó để tạo truy vấn động, nhưng điều này có vẻ là giải pháp tốt nhất cho nhiều trường hợp. +1 –

+0

nhưng cách tiếp cận này dễ bị tấn công tiêm sql. – aishu

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