#java #sqlite #javafx #scenebuilder
#java #sqlite #javafx #scenebuilder
Вопрос:
Итак, проблема сейчас в том, что у меня проблема с подсказкой правильного этапа для каждого типа пользователей, у меня есть метод, который проверяет их имя пользователя и возвращает их тип роли, и после этого он предложит его на соответствующий этап после проверки их пользователя и прохождения.
Я попытался выполнить некоторую отладку, и кажется, что в методе 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.");
}
}
Получить метод UserRole
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();
}
}
Комментарии:
1. В запросе есть 2 заполнителя, но вы задаете только один. Таким образом, вы ВСЕГДА будете получать исключение при вызове
pr.executeQuery()
. Вероятно, изменение запроса устранило бы проблему:String sql = "SELECT role FROM Login WHERE username = ?";
(Я почти уверен, что это дубликат, поэтому я не публикую это как ответ.) Кстати: я рекомендую сохранить результат запроса / использовать aswitch
вместо запроса к БД до 3 раз (или 5 раз, если вы проверяете 5 разных значений).2. получаете ли вы исключение или ваш отладчик не останавливается на определенной точке останова, которую вы ожидаете? — Ваш вопрос позволяет мне думать, что это может быть: ваша loginmodel не инициализирована
3. Включает ли этот проект
Swing
в себя ?JFrame
Правильна ли здесь формулировка?4. jframe, я использовал javafx для этого, его в теге, @sedrick
5. хорошо, так что я использовал
stage
вместо этого, было бы лучшим словомjavafx
, поскольку я используюscenebuilder
графический интерфейс? @Sedrick
Ответ №1:
Я нашел решение, кажется, что я забыл выполнить запрос, после его добавления в блок try, похоже, он работает.
rs.executeQuery();