sql >> Database >  >> RDS >> Mysql

Inloggen werkt alleen voor de laatste gebruiker in de database

U kopieert de hele DB-tabel naar het geheugen van Java en doet de vergelijking in een while loop over alle records. U breekt de while niet af loop wanneer er een overeenkomst is met een record, dus het blijft over de resterende records lopen en dus de pagename wordt elke keer overschreven met "start".

U moet een break toevoegen verklaring:

if (results.getString(2).equals(password) && results.getString(1).equals(username)) { 
    pagename="main";
    break;
}

Of, beter nog, laat SQL het werk doen waarvoor het is ontworpen, door precies te selecteren en terug te geven de gegevens die je nodig hebt:

preparedStatement = connection.prepareStatement("SELECT id FROM user WHERE username=? AND password=MD5(?)");
preparedStatement.setString(1, username);
preparedStatement.setString(2, password);
resultSet = preparedStatement.executeQuery();

if (resultSet.next()) {
    pagename = "main";
}
else {
    pagename = "start";
}

Dat is efficiënter en verstandiger.



  1. PIVOT dynamisch, geretourneerde resultaten van JOIN van twee tabellen

  2. Ongeldige cast-uitzondering is niet behandeld MySQL

  3. SQL Server Log Verzending &Disaster Recovery Installatie en configuratie -1

  4. Mysql sorteer op datum maar negeer jaar