Mysql
 sql >> Baza danych >  >> RDS >> Mysql

JDBC zawsze testuje ostatni wiersz tabeli MySQL?

Ponieważ ciągniesz całość tabelę bazy danych do pamięci Javy i testowanie co wiersz w pętli while. Nie przerywasz pętli, jeśli zostanie znalezione dopasowanie, tak że nadal nadpisuje wynik logiczny aż do ostatniego wiersza.

To powiedziawszy, naprawdę nie chcesz robić porównania w Javie. Wystarczy skorzystać z SQL WHERE klauzula . To dużo bardziej wydajne i naprawdę zadanie, które ma wykonać DB. Nie próbuj przejmować pracy bazy danych w Javie, będzie to tylko nieefektywne.

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

Widzisz, że wprowadziłem kilka ulepszeń:

  1. Użyj przygotowanego oświadczenia.
  2. Nie używaj equalsignorecase. Hasło „FooBar” NIE powinno być takie samo jak „foobar”.
  3. Delikatnie pozyskuj i zamykaj zasoby w tym samym zakresie, aby uniknąć wycieku.
  4. Miej to w niezależnej i wielokrotnego użytku niestatycznej metodzie DAO.

Aby dowiedzieć się więcej o używaniu JDBC we właściwy sposób, możesz znaleźć ten podstawowy samouczek przydatne.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak działa wstrzykiwanie SQL i jak się przed nim chronić?

  2. Formularz HTML / Php nie dodaje się do bazy danych SQL

  3. Znajdź zakresy dat nakładające się w tej samej tabeli dla określonego użytkownika MySQL

  4. PDO mysql:Jak sprawdzić, czy wstawienie się powiodło?

  5. Usuń z jednego stołu z dołącz