javafx - 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);
}
}
}
这是输入正确详细信息后的屏幕截图:
可以做些什么来解决这个问题并达到预期的效果?请。
解决方案
问题可能在陈述中。尝试使用 PreparedStatement 解决典型的 SQL 语法问题。
PreparedStatement st = conn.createStatement()("SELECT * FROM tbl_lib WHERE lib_acc = ?);
st.setString(1, txtUn.getText());
推荐阅读
- jquery - 根据数字添加字段(Jquery)
- c++ - 在 OpenGL 中沿椭圆路径制作动画
- node.js - Axios 调用无法在生产环境中使用 localhost
- php - 从 laravel 助手读取配置值
- java - 使用 onActivityResult 关闭返回 Activity 的 DialogFragment
- vuejs2 - vue中调用一个方法到另一个方法中
- angular - 错误 TS2307:在 moment-date-adapter.d.ts 中找不到模块“moment”
- javascript - 文字对象中的“this”关键字
- android - Android ContentObserver-判断短信状态
- sql - 返回满足并同时具有 IN 条件的行(Ids)