Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Đăng nhập chỉ hoạt động cho người dùng cuối cùng trong cơ sở dữ liệu

Bạn đang sao chép toàn bộ bảng DB vào bộ nhớ của Java và thực hiện so sánh trong while lặp qua tất cả các bản ghi. Bạn không hủy bỏ while lặp lại khi có sự trùng khớp với một bản ghi, vì vậy nó tiếp tục lặp qua các bản ghi còn lại và vì vậy pagename luôn bị ghi đè bằng "start".

Bạn cần thêm break tuyên bố:

if (results.getString(2).equals(password) && results.getString(1).equals(username)) { 
    pagename="main";
    break;
}

Hoặc, tốt hơn, hãy để SQL thực hiện công việc mà nó được thiết kế, chọn và trả về chính xác dữ liệu bạn cần:

preparedStatement = connection.prepareStatement("SELECT id FROM user WHERE username=? AND password=MD5(?)");
preparedStatement.setString(1, username);
preparedStatement.setString(2, password);
resultSet = preparedStatement.executeQuery();

if (resultSet.next()) {
    pagename = "main";
}
else {
    pagename = "start";
}

Điều đó hiệu quả và hợp lý hơn.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách chèn nhiều hình ảnh vào bảng cơ sở dữ liệu MySQL với khóa ngoại tham chiếu đến một khóa chính duy nhất

  2. MySQL vòng trong truy vấn, kết quả sai

  3. Cách tải lên và tải xuống các tệp PHP và MySQL

  4. Cách lấy và sắp xếp các mục nhập phù hợp nhất từ ​​cơ sở dữ liệu với nhiều từ khóa Laravel 5

  5. Gửi giá trị Textfield vào PHP MySQL bằng xcode 8 (Objective-c) có hoặc không có hành động nhấp chuột?