Karena Anda sedang mengangkut seluruhnya tabel database ke dalam memori Java dan menguji setiap baris dalam perulangan while. Anda tidak memutus loop jika kecocokan ditemukan sehingga terus menimpa hasil boolean hingga dengan baris terakhir.
Yang mengatakan, Anda benar-benar tidak ingin melakukan perbandingan di Jawa. Cukup gunakan SQL WHERE
klausa
. Itu banyak lebih efisien dan benar-benar tugas yang seharusnya dilakukan DB. Jangan mencoba mengambil alih pekerjaan DB di Java, itu hanya akan menjadi tidak efisien.
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;
}
Anda melihat bahwa saya membuat beberapa peningkatan:
- Gunakan pernyataan yang sudah disiapkan.
- Jangan gunakan equalsignorecase. Kata sandi "FooBar" TIDAK boleh sama dengan "foobar".
- Dapatkan dan tutup sumber daya secara perlahan dalam cakupan yang sama untuk menghindari kebocoran.
- Dapatkan dalam metode DAO non-statis yang independen dan dapat digunakan kembali.
Untuk mempelajari lebih lanjut tentang menggunakan JDBC dengan cara yang benar, Anda dapat menemukan ini tutorial dasar berguna.