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.