【发布时间】:2019-09-08 19:12:26
【问题描述】:
所以现在的问题是我在为每种类型的用户提示到正确的阶段时遇到问题,我有一个方法可以检查他们的用户名并返回他们的角色类型,然后它将提示到他们各自的阶段在验证他们的用户并通过之后。
我尝试进行一些调试,但似乎 getUserRole 方法有问题,因为我无法在登录控制器中进入该方法。
**登录控制器*
@FXML
public void Login(ActionEvent event) {
try {
if (this.loginModel.isLogin(this.username.getText(), this.password.getText())) {
Stage stage = (Stage) this.login.getScene().getWindow();
stage.close();
if (this.loginModel.getUserRole(this.username.getText()) == 5) {
adminLogin();
} else if (this.loginModel.getUserRole(this.username.getText()) == 4) {
technicianLogin();
} else if (this.loginModel.getUserRole(this.username.getText()) == 3) {
custServiceLogin();
} else if (this.loginModel.getUserRole(this.username.getText()) == 3) {
financeLogin();
} else if (this.loginModel.getUserRole(this.username.getText()) == 3) {
managementLogin();
} else {
this.loginStatus.setText("The username or password entered is incorrect. Please check and try again.");
}
}
} catch (Exception localException) {
this.loginStatus.setText("The username or password entered is incorrect. Please check and try again.");
}
}
获取用户角色方法
public int getUserRole(String user) throws Exception
{
PreparedStatement pr = null;
ResultSet rs = null;
String sql = "SELECT * FROM Login WHERE username = ? AND role = ?";
try
{
pr = this.connection.prepareStatement(sql);
pr.setString(1, user);
if(rs.next())//cant initialized this if statement
{
int role = rs.getInt("role");
return role;
}
else{
return 0;
}
}
catch(SQLException ex)
{
return 0;
}
finally
{
pr.close();
rs.close();
}
}
【问题讨论】:
-
查询中有2个占位符,但你只设置了一个。这样你在调用
pr.executeQuery()时总是会遇到异常。查询的更改可能会解决问题:String sql = "SELECT role FROM Login WHERE username = ?";(我很确定这是重复的,这就是为什么我不将其发布为答案。)顺便说一句:我建议存储查询的结果/使用switch而不是最多查询数据库 3 次(或 5 次,如果您检查 5 个不同的值)。 -
您是否遇到异常,或者您的调试器没有在您期望的某个断点处停止? - 你的问题让我觉得可能是:你的登录模型没有初始化
-
这个项目是否包含
Swing?JFrame这里的措辞正确吗? -
jframe,我用 javafx 做这个,它在标签里,@sedrick
-
好吧,所以我使用
stage来代替javafx会更好,因为我使用scenebuilder来做GUI? @Sedrick
标签: java sqlite javafx scenebuilder