sql >> Database teknologi >  >> RDS >> Mysql

JDBC tester altid den sidste række af MySQL-tabellen?

Fordi du trækker det hele databasetabel ned i Javas hukommelse og test hver række i en mens-løkke. Du bryder ikke løkken, hvis der findes et match, så det fortsætter med at overskrive det boolske resultat indtil med den sidste række.

Når det er sagt, vil du virkelig ikke lave sammenligningen i Java. Du skal bare bruge SQL WHERE klausul . Det er meget mere effektiv og virkelig den opgave, en DB skal udføre. Forsøg ikke at overtage DB's arbejde i Java, det bliver kun ineffektivt.

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;
}

Du kan se, at jeg lavede et par forbedringer:

  1. Brug forberedt erklæring.
  2. Brug ikke equalsignorecase. En adgangskode til "FooBar" bør IKKE være det samme som "foobar".
  3. Indkøb og luk forsigtigt ressourcer i samme omfang for at undgå lækage.
  4. Har det i en uafhængig og genbrugelig ikke-statisk DAO-metode.

For at lære mere om at bruge JDBC på den rigtige måde kan du finde dette grundlæggende selvstudie nyttigt.



  1. Oracle Connection Pool Class

  2. Django kunne ikke finde MySQLdb python-modulet

  3. oversættelse af mysql_fetch_array til PDO::FETCH_NUM

  4. Udfyldning af html-formularer med mysql-data ved hjælp af php coming up null