Защото теглиш всито таблица на база данни надолу в паметта на Java и тестване всеки ред в цикъл while. Не прекъсвате цикъла, ако бъде намерено съвпадение, така че да продължи да презаписва булевия резултат до последния ред.
Това каза, че наистина не искате да правите сравнението в Java. Просто използвайте SQL WHERE
клауза
. Това е много по-ефективен и наистина задачата, която DB трябва да изпълнява. Не се опитвайте да поемете работата на DB в Java, това само ще бъде неефективно.
public boolean exists(String username, String password) throws SQLException {
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
boolean exists = false;
try {
connection = database.getConnection();
preparedStatement = connection.prepareStatement("SELECT id FROM client WHERE username = ? AND password = ?");
preparedStatement.setString(1, username);
preparedStatement.setString(2, password);
resultSet = preparedStatement.executeQuery();
exists = resultSet.next();
} finally {
close(resultSet);
close(preparedStatement);
close(connection);
}
return exists;
}
Виждате, че направих няколко подобрения:
- Използвайте подготвен израз.
- Не използвайте equalsignorecase. Паролата за „FooBar“ НЕ трябва да бъде същата като „foobar“.
- Внимателно придобивайте и затваряйте ресурси в същия обхват, за да избегнете изтичане.
- Имайте го в независим и повторно използваем нестатичен DAO метод.
За да научите повече за правилното използване на JDBC, можете да намерите това основен урок полезно.