sql >> Databáze >  >> RDS >> Mysql

JDBC vždy testuje poslední řádek tabulky MySQL?

Protože vezete celý databázovou tabulku uložit do paměti Java a testovat každý řádek ve smyčce while. Smyčku nepřerušíte, pokud je nalezena shoda, takže pokračuje v přepisování booleovského výsledku až do posledního řádku.

To znamená, že opravdu nechcete provádět srovnání v Javě. Stačí použít SQL WHERE doložka . To je moc efektivnější a skutečně úkol, který má DB dělat. Nesnažte se převzít práci DB v Javě, bude to jen neefektivní.

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

Vidíte, že jsem provedl několik vylepšení:

  1. Použijte readystatement.
  2. Nepoužívejte equalsignorcase. Heslo „FooBar“ NESMÍ být stejné jako heslo „foobar“.
  3. Jemně získávejte a uzavírejte zdroje ve stejném rozsahu, abyste zabránili úniku.
  4. Mějte to v nezávislé a opakovaně použitelné nestatické metodě DAO.

Chcete-li se dozvědět více o správném používání JDBC, můžete najít toto základní návod užitečné.



  1. 4 způsoby, jak oddělit hodiny, minuty a sekundy od časové hodnoty v MariaDB

  2. Rychle přidejte kopii sloupce do tabulky MySQL

  3. MySQL nedovolí přihlášení uživatele:Chyba 1524

  4. Upravit sloupec versus změnit sloupec