sql >> Databasteknik >  >> RDS >> Mysql

JDBC testar alltid den sista raden i MySQL-tabellen?

Eftersom du drar hela databastabell ner i Javas minne och testa varje rad i en while-loop. Du bryter inte loopen om en matchning hittas så att den fortsätter att skriva över det booleska resultatet förrän med den sista raden.

Som sagt, du vill verkligen inte göra jämförelsen i Java. Använd bara SQL WHERE klausul . Det är mycket effektivare och verkligen den uppgift en DB är tänkt att göra. Försök inte ta över DB:s arbete i Java, det kommer bara att bli 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 ser att jag gjorde några förbättringar:

  1. Använd preparerat uttalande.
  2. Använd inte equalsignorecase. Lösenordet "FooBar" bör INTE vara detsamma som "foobar".
  3. Skaffa och stäng försiktigt resurser i samma omfattning för att undvika läckage.
  4. Ha den i en oberoende och återanvändbar icke-statisk DAO-metod.

För att lära dig mer om hur du använder JDBC på rätt sätt kan du hitta detta grundläggande handledning användbar.



  1. Det finns i detaljerna

  2. Kontrollera efter misslyckad e-post i SQL Server (T-SQL)

  3. Hur använder man SqlCommand för att SKAPA DATABAS med parametrerat db-namn?

  4. Hur använder man sql*plus i Windows kommandoskript för att styra flödet?