2017-04-09 4 views
0

私はしばらくこのことに固執しており、これを修正する方法がわかりません。問題は私のSQLクエリがjavaFXテキストフィールドとpasswordfield(私はログインウィンドウを構築しています)からの入力を取得しないことです。 テキストフィールドから値を取得するのではなく、手動で値を入力すると、プログラムは正常に動作します。そうしないと、ログインボタンを押しても何も起こりません。問題は、エラーメッセージが表示されず、もちろん、次の行で発生します。ここではMySQL Prepared Statementが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

テキストフィールドから取得するのではなく、手動でデータを入力すると、つまり、次のようになります。 preparedStatement.setString(1、 "admin"); preparedStatement.setString(2、 "admin"); – cris22tian

+0

'txtUserName.getText()。trim()'と 'txtPassword.getText()。trim()'を試してみることができますか? – 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

関連する問題