2017-09-01 3 views
-3

ich SQLite bin mit einem Login zu tun, aber die Login-und Datenbank-Worte, die ich den folgenden Code verwendet vergleichen:Zwei identische Wörter sind verschiedene

sagen
public static boolean result(String nome, String pass) { 
Connection c = null; 
Statement stmt = null; 
boolean bo = false; 
try { 
    Class.forName("org.sqlite.JDBC"); 
    c = DriverManager 
      .getConnection("jdbc:sqlite:C:/Users/M4UR0/Desktop/Pastas/Programação/Java/Albamoura/data.db"); 
    c.setAutoCommit(false); 

    stmt = c.createStatement(); 
    ResultSet rs = stmt.executeQuery("SELECT * FROM COMPANY where NAME = '" + nome + "';"); // 

    String password = rs.getString("PASSWORD"); 
    if (rs.next() || !pass.equalsIgnoreCase(password)) { 
     bo = false; 
     System.out.println("deu1 " + password + " - " + pass); 
    } else { 
     System.out.println("Entrou!"); 
     bo = true; 
    } 

    rs.close(); 
    stmt.close(); 
    c.close(); 
} catch (Exception e) { 
    System.err.println(e.getClass().getName() + ": " + e.getMessage()); 
    System.exit(0); 
    bo = false; 
} 
System.out.println("Operation done successfully"); 
return bo; 

}

Und Konsole:

Conecção estabelecida!

deu1 Wort - Wort

Betrieb

falsch

2 identische Wörter etwas so anders erscheinen, habe ich nicht bemerkt erfolgreich getan? Hilfe pls

+2

Was ist ein "Stromg"? –

+0

seine worte sorry. –

+0

Ich habe auch bemerkt, dass die Zeile 'stmt.executeQuery (...)' anfällig für SQL-Injection ist, möchten Sie stattdessen vorbereitete Anweisungen verwenden. – dat3450

Antwort

2

Ihre Boolesche Logik ausgeschaltet ist hier

(rs.next() || !pass.equalsIgnoreCase(password)) 

, Das

(rs.next() && !pass.equalsIgnoreCase(password)) 

mit einem || sollte es nicht die nächste Bedingung wertet (Kurzschlüsse) wenn Sie haben eine Reihe. Beachten Sie, dass Ihr else auch trügerisch ist - denn wenn es keine Zeile gibt, dann scheint es, dass Sie auch erfolgreich sind.

Verwandte Themen