Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

JDBC sempre testa a última linha da tabela MySQL?


Porque você está transportando todo tabela de banco de dados na memória do Java e testando cada linha em um loop while. Você não interrompe o loop se uma correspondência for encontrada para que continue sobrescrevendo o resultado booleano até a última linha.

Dito isso, você realmente não quer fazer a comparação em Java. Basta usar o SQL WHERE cláusula . Isso é muito mais eficiente e realmente a tarefa que um banco de dados deve fazer. Não tente assumir o trabalho do banco de dados em Java, só vai ser ineficiente.
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;
}

Você vê que eu fiz algumas melhorias:
  1. Use a declaração preparada.
  2. Não use equalsignorecase. Uma senha de "FooBar" NÃO deve ser igual a "foobar".
  3. Adquira e feche os recursos com cuidado no mesmo escopo para evitar vazamentos.
  4. Tê-lo em um método DAO não estático independente e reutilizável.

Para saber mais sobre como usar o JDBC da maneira correta, você pode encontrar este tutorial básico útil.