2011-07-06 38 views
5

Tôi có cú pháp sau trong mã của mình, nhưng nó không hoạt động khi tôi đang cố sử dụng toán tử LIKE trong JDBC. Nó hoạt động tốt theo cách này, khi nó chỉ là bình đẳng:Làm thế nào để sử dụng toán tử giống như MySQL trong JDBC?

ResultSet resultSet = statement.executeQuery("SELECT * 
               FROM drawings 
               WHERE name = '"+ DT +"'"); 

Nhưng nếu tôi muốn sử dụng các nhà điều hành LIKE để tìm kiếm như một ký tự đại diện, tôi tiếp tục nhận được báo lỗi nói rằng "%" không phải là một nhân vật có giá trị . Làm cách nào tôi có thể sử dụng toán tử LIKE một cách chính xác?

+0

Vui lòng không cho tôi biết bạn đang thực hiện truy vấn từ trang JSP của mình. – Jacob

+0

Truy vấn LIKE của bạn trông như thế nào? –

+0

truy vấn = ("SELECT * FROM bản vẽ WHERE name LIKE" "% DT%" '"); – Sheeyla

Trả lời

15

Từ nhận xét:

query=("SELECT * FROM drawings WHERE name LIKE '"%DT%"'"); 

này không biên dịch. Giả sử rằng DT là một biến, sau đó nó thay vì phải trông giống như

query = "SELECT * FROM drawings WHERE name LIKE '%" + DT + "%'"; 

(chú ý đến làm nổi bật cú pháp, các % có phải là một phần của chuỗi SQL!)

Tuy nhiên, concatenating người dùng các biến chuỗi được điều khiển giống như trong truy vấn SQL đặt cửa ra vào rộng mở cho thành công SQL injectionattacks. Learn cách sử dụng PreparedStatement và sử dụng nó thay thế.

String sql = "SELECT * FROM drawings WHERE name LIKE ?"; 
// ... 
preparedStatement = connection.prepareStatement(sql); 
preparedStatement.setString(1, "%" + DT + "%"); 
resultSet = preparedStatement.executeQuery(); 
// ... 
+2

Rất cám ơn Balus ... bây giờ tôi đã hiểu nhận xét của bạn về JSP ... Tôi chắc chắn sẽ xem xét điều này và tránh sử dụng các thẻ sai trong câu hỏi của tôi ... cảm ơn nhiều lần, câu trả lời của bạn đã giải quyết được vấn đề tôi đã có cho 2 ngày, và tôi đang thực hiện readyStatement cũng. Trân trọng – Sheeyla

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