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.