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

JDBC testa sempre l'ultima riga della tabella MySQL?

Perché stai trasportando tutto tabella del database nella memoria di Java e test ogni riga in un ciclo while. Non interrompi il ciclo se viene trovata una corrispondenza in modo che continui a sovrascrivere il risultato booleano fino all'ultima riga.

Detto questo, non vuoi davvero fare il confronto in Java. Basta utilizzare SQL WHERE clausola . È molto più efficiente e davvero il compito che un DB dovrebbe svolgere. Non cercare di prendere in carico il lavoro del DB in Java, sarà solo inefficiente.

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

Vedi che ho apportato alcuni miglioramenti:

  1. Utilizza la dichiarazione preparata.
  2. Non usare equalsignorecase. Una password di "FooBar" NON deve essere la stessa di "foobar".
  3. Acquisisci e chiudi delicatamente le risorse nello stesso ambito per evitare perdite.
  4. Avere in un metodo DAO non statico indipendente e riutilizzabile.

Per saperne di più sull'utilizzo di JDBC nel modo corretto, puoi trovare questo tutorial di base utile.