2017-04-09 59 views
0

阅读我坚持这一段时间,我不知道如何解决这个问题。问题是我的SQL查询没有得到来自javaFX textfield和passwordfield的输入(我正在构建一个登录窗口)。 如果我手动输入值而不是从文本字段中获取它们,则程序可以正常工作,否则在按下登录按钮时不会发生任何事情。出现该问题在下面几行,当然没有错误消息:MySQL的预处理语句不从JavaFX的文本字段

preparedStatement.setString(1,txtUserName.getText()); 
preparedStatement.setString(2,txtPassword.getText()); 

下面是完整的代码:

public class LoginWindow implements Initializable{ 

@FXML 
private TextField txtUserName; 
@FXML 
private PasswordField txtPassword; 
@FXML 
private Button btnLogin; 

Connection connection = null; 
PreparedStatement preparedStatement = null; 
ResultSet resultSet = null; 

// Setting the login button. 
@FXML 
private void setBtnLogin(ActionEvent event) { 
    try { 
     connection = DBUtilities.getConnection(); 
     String sqlQuery = "SELECT * FROM user_login_details WHERE User_Name = ? AND User_Password = ?"; 
     preparedStatement = connection.prepareStatement(sqlQuery); 
     preparedStatement.setString(1,txtUserName.getText()); 
     preparedStatement.setString(2,txtPassword.getText()); 
     resultSet = preparedStatement.executeQuery(); 
     if(resultSet.next()) { 
      DBUtilities.showInforMsg("Logged in:", "You have logged in!"); 

     } else { 
      DBUtilities.showErrorMsg("Error:", "Invalid username or password"); 

     } 

    }catch (Exception exception) { 
     exception.printStackTrace(); 

    }finally { 
     DBUtilities.closePreparedStatement(preparedStatement); 
     DBUtilities.closeResultSet(resultSet); 
     DBUtilities.closeConnection(connection); 
    } 
} 
@Override 
public void initialize(URL location, ResourceBundle resources) { 
    btnLogin.setOnAction(this::setBtnLogin); 
} 
} 
+0

通过输入数据手动而不是从一个文本字段retreiving它我的意思是: 了PreparedStatement.setString(1,“管理员”); preparedStatement.setString(2,“admin”); – cris22tian

+0

你能用'txtUserName.getText()。修剪()'和'txtPassword.getText()。修剪()',如果它的工作原理试试? – developer

+0

我试过了,它不起作用。感谢您的回应。任何其他想法可能会导致它? – cris22tian

回答

0

您可以先尝试从输入字段打印字符串调试:

String username = txtUserName.getText(); 
String password = txtPassword.getText(); 

System.out.println("User name = " + username); 
System.out.println("Password = " + password); 

preparedStatement.setString(1, username); 
preparedStatement.setString(2, password); 

如果用户名和密码为空,那么请确保这些字段控制器与FXML文档良好绑定。

1

非常感谢。我只是没有给密码字段提供任何ID。

+0

这意味着你忘了密码字段绑定到FXML文件,这使得我的回答一个可行的解决方案。投票我的答案! – cdaiga