sql查询返回没有结果(什么时候应该)没有错误

时间:2017-10-29 19:15:19

标签: java sql jdbc

我正在尝试查询数据库以选择数据库中存在的用户(登录)。

Config.java class
public class config {
protected static String dbhost = "localhost";
protected static String dbport = "1433";
protected static String dbuser = "root";
protected static String dbpass = "";
protected static String dbname = "BenxHR";
}

my database handler classs:
public class DbHandlers extends config{

protected Connection dbconnection;

public Connection getConnection(){
 final String ConnectionString = "jdbc:sqlserver://" + config.dbhost + ":" + 

config.dbport + ";databaseName=" + config.dbname;
     try{
         Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

     } catch (ClassNotFoundException e) {
         System.err.println(e.getMessage());
     }

     try {
         dbconnection = DriverManager.getConnection(ConnectionString, config.dbuser, config.dbpass);
     } catch (SQLException e){
         System.err.println(e.getMessage());
     }
     return dbconnection;
    }
}

The query:
private void clickLogin(MouseEvent event) throws SQLException {     
    String query1 = "SELECT * FROM users WHERE username  = ? OR email = ? 
AND password = ?";
    con = handler.getConnection();
    pst = con.prepareStatement(query1);
    pst.setString(1, usernameField.getText());
    pst.setString(2, usernameField.getText());
    pst.setString(3, passwordField.getText());

    ResultSet rs = pst.executeQuery();

    if(!rs.isBeforeFirst()){
        System.out.println("Failed.");
    } else {
        System.out.println("Success");
    }
}

所以我有一个包含数据库信息的类,如ip,port,user和password。我还有一个SELECT语句,它选择数据库项并返回一个行值,具体取决于它是否成功返回。

一切似乎都在起作用,并且不会抛出任何异常,但无论使用哪个用户名和密码,它都会打印出“成功”这一行。

有没有人有理由说明为什么会这样?

1 个答案:

答案 0 :(得分:1)

适合使用参数。传递密码不好。您应该加密它们并仅以加密状态传递它们。

这不会解决您的问题,但您的查询不符合您的意图。它正在做:

OR

据推测,您是SQL新手。我建议您在条件中混合ANDWHERE (username = ? OR email = ?) AND password = ?) 时使用括号。大概你打算:

double a = 1.1 * 3.1;
cout <<a; //gives 3.4100000000000006 instead of 3.41

正如我所说的那样,如果您的版本没有返回行,则不会返回行。