sql >> Base de Datos >  >> RDS >> Mysql

¿JDBC siempre prueba la última fila de la tabla MySQL?

Porque estás transportando el todo tabla de base de datos en la memoria de Java y probando cada fila en un ciclo while. No se rompe el bucle si se encuentra una coincidencia, por lo que continúa sobrescribiendo el resultado booleano hasta la última fila.

Dicho esto, realmente no quieres hacer la comparación en Java. Simplemente use el SQL WHERE cláusula . Eso es mucho más eficiente y realmente la tarea que se supone que debe hacer un DB. No intente hacerse cargo del trabajo de la base de datos en Java, solo 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;
}

Verá que hice algunas mejoras:

  1. Usar declaración preparada.
  2. No utilice mayúsculas y minúsculas. Una contraseña de "FooBar" NO debe ser la misma que "foobar".
  3. Adquiera y cierre suavemente los recursos en el mismo ámbito para evitar fugas.
  4. Tenerlo en un método DAO no estático independiente y reutilizable.

Para obtener más información sobre el uso correcto de JDBC, puede encontrar este tutorial basico útil.