sql >> Database >  >> RDS >> Mysql

JDBC test altijd de laatste rij van de MySQL-tabel?

Omdat je de hele . vervoert databasetabel in het geheugen van Java en test elke rij in een while-lus. Je onderbreekt de lus niet als er een overeenkomst wordt gevonden, zodat deze de booleaanse uitkomst blijft overschrijven tot de laatste rij.

Dat gezegd hebbende, je wilt de vergelijking echt niet in Java maken. Maak gewoon gebruik van de SQL WHERE clausule . Dat is veel efficiënter en echt de taak die een DB zou moeten doen. Probeer niet het werk van de database in Java over te nemen, het zal alleen maar inefficiënt zijn.

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

Je ziet dat ik een paar verbeteringen heb aangebracht:

  1. Gebruik voorbereide verklaring.
  2. Gebruik geen equalsignorecase. Een wachtwoord van "FooBar" mag NIET hetzelfde zijn als "foobar".
  3. Verwerf en sluit voorzichtig middelen binnen hetzelfde bereik om lekken te voorkomen.
  4. Gebruik het in een onafhankelijke en herbruikbare niet-statische DAO-methode.

Voor meer informatie over het op de juiste manier gebruiken van JDBC kunt u dit vinden basishandleiding nuttig.



  1. Opgeslagen Oracle-procedure aanroepen met uitvoerparameter van SQL Server

  2. Wat is MySQL?

  3. PDO::rowCount VERSUS COUNT(*)

  4. Wordnet sqlite Synoniemen en voorbeelden