2017-09-01 87 views
-3

我使用的SQLite做一个登录,但是比较我用下面的代码的登录名和数据库的话:两个相同的字不同

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; 

}

和控制台说:

Conecçãoestabelecida!

deu1单词 - 单词

操作已成功完成

2相同的字显示为不同的,我没有注意到的东西吗?帮助请

+2

什么是“stromg”? –

+0

其言辞对不起。 –

+0

我也注意到'stmt.executeQuery(...)'行很容易出现SQL注入,您可能想使用预处理语句。 – dat3450

回答

2

你的布尔逻辑是在这里下车

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

,应该是

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

||它不评估未来状况(短路)你有一排。请注意,您的else也是似是而非的 - 因为如果没有排,那么您似乎也会将其设置为成功。

相关问题