2012-08-05 46 views
6

Tôi có đoạn code sau trong một servlet -truy vấn sql thực hiện với PreparedStatement

  String loginID = request.getParameter("loginId").toString(); 
      String loginPassword = request.getParameter("loginPassword").toString(); 
      String strSQLcount = "SELECT COUNT(*) as 'Number Of Match' " 
       + "FROM persons " + "WHERE (password =? AND id =?);"; 
      PreparedStatement prepareSQL = connection 
        .prepareStatement(strSQLcount); 
      prepareSQL.setString(1, loginPassword); 
      prepareSQL.setString(2, loginID); 
      ResultSet numOfMatchResult = prepareSQL.executeQuery(); 
      // now we know number of matchs ... 
      int numOfMatch = numOfMatchResult.getInt(1); 

Khi ở trên chạy và đạt đến dòng int numOfMatch = numOfMatchResult.getInt(1); nó ném ngoại lệ - java.sql.SQLException. Tôi đã kiểm tra và thấy rằng nó bởi vì executeQuery() không lấy được ai. nó xảy ra mặc dù tôi có trong bảng persons, được tạo bằng MySQL, 2 trường - id (text) với giá trị "300" và password (text) có giá trị "500". và tất nhiên tôi kiểm tra nó khi loginIDloginPassword có cùng 2 giá trị. Tôi đã kiểm tra tất cả những thứ khác về kết nối với DB và nó đã được OK .. vì vậy tôi nghĩ rằng vấn đề là trong cú pháp SQL trong strSQLcount.

+0

Vui lòng hiển thị thông báo/theo dõi ngoại lệ. Vui lòng cho biết mã của bạn đã từng kết nối với cơ sở dữ liệu cụ thể chưa. – Javier

Trả lời

6

Bạn quên gọi next() trên tập kết quả:

ResultSet numOfMatchResult = prepareSQL.executeQuery(); 
int numOfMatch = 0; 
if (rs.next() {  
    numOfMatch = numOfMatchResult.getInt(1); 
} 

Nếu đó không phải là đủ để giải quyết vấn đề, dán toàn bộ stack trace của ngoại lệ: nó có chứa thông tin có ý nghĩa.

+0

cảm ơn nó đủ :) vì vậy cho đến khi tôi không làm "rs.next()" để ResultSet tôi không thể sử dụng nó? – URL87

+0

Mỗi lần bạn muốn truy xuất thông tin từ tập hợp kết quả, bạn cần phải trỏ con trỏ đến một hàng dữ liệu nhất định. 'rs.next()' đặt nó trên hàng kế tiếp (lần đầu tiên nó được gọi). –

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