首页 > 解决方案 > javafx - 如果登录详细信息正确,登录函数将执行“else”块,但当详细信息错误时没有任何反应

问题描述

所以我有这个登录控制器,当详细信息正确时执行“else”块,这意味着输入的用户名和密码存在于数据库中。那不应该发生。应该发生的是,如果详细信息正确,则应该执行“if”块,然后转到另一个场景,如果详细信息错误,则会弹出警报(“else”块的内容)。

登录控制器.java

public class Log_inController implements Initializable {
private DBConnection dc;

@FXML TextField txtUn;
@FXML PasswordField txtPw;
@FXML Button btnLogin;


@Override
public void initialize(URL url, ResourceBundle rb) {
    // TODO
}    


@FXML
public void log_in (ActionEvent event) throws SQLException, IOException {
     dc = new DBConnection();
   try{
        String name =  txtUn.getText();
        String pass =  txtPw.getText();
        
        
        Connection conn = dc.Connect();
        ResultSet rs = conn.createStatement().executeQuery("SELECT * FROM tbl_lib WHERE lib_acc = '"+ name +"'");
   
    
    if(rs.next()){
        String database_name = rs.getString(1);
        String database_pass = rs.getString(2); 
        
        if(name.equals(database_name) && pass.equals(database_pass)){
            Parent x=FXMLLoader.load(getClass().getResource("/Collection_UI/Home.fxml")); 
            Scene  M= new Scene(x);
            Stage app=(Stage)((Node)event.getSource()).getScene().getWindow();
            app.setScene (M);
            app.show();
        }else{
            Alert alert = new Alert(AlertType.WARNING);
            alert.setHeaderText("Invalid Credentials");
            alert.setContentText("Please input your valid username and password then try again");

            alert.showAndWait();  
        }
   }
    
}
 catch(SQLException ex){
     System.err.println("Error"+ex);
 }
         
         }
    
}

这是输入正确详细信息后的屏幕截图:

https://imgur.com/8k0s7ia

可以做些什么来解决这个问题并达到预期的效果?请。

标签: javafx

解决方案


问题可能在陈述中。尝试使用 PreparedStatement 解决典型的 SQL 语法问题。

PreparedStatement st = conn.createStatement()("SELECT * FROM tbl_lib WHERE lib_acc = ?);
st.setString(1, txtUn.getText());

推荐阅读