2017-03-23 6 views
0

ステートメントが自分のコードで実行できるかどうかを確認するにはどうすればよいですか? txtFirstName.getText()が空の場合、2番目のパラメータは設定されません。SQL文を実行する準備ができているかどうかをチェックする方法は?

String sql = "INSERT INTO Employees (id, firstName, lastName, adress, phone, email, photo, comments) VALUES (?, ?, ?, ?, ?, ?, ?, ?)"; 
      PreparedStatement statement = database.connection.prepareStatement(sql); 
      statement.setString(1, database.users.size() + 1 + ""); 
      if (txtFirstName.getText().matches("")) 
       statement.setString(2, txtFirstName.getText()); 
      statement.setString(3, txtLastName.getText()); 
      statement.setString(4, txtAdress.getText()); 
      statement.setString(5, txtPhone.getText()); 
      statement.setString(6, txtEmail.getText()); 
      statement.setString(7, txtPhotoURL.getText()); 
      statement.setString(8, txtComment.getText()); 

      statement.executeUpdate(); 
+0

if文をSQL文の前に設定します。それが空であれば実行しないように変更してください。また、自動インクリメント列の使用をチェックアウトする必要があります。 database.users.size()+ 1は時間の経過と共に重複を引き起こします。 – Johan

+1

例外ハンドラを使用する – Vinod

+0

データベースに対して適切な(チェック)制約を作成し、データベースサーバが通知するエラーを処理します –

答えて

0

txtFirstName.getText()が空である場合に、第2のパラメータが設定されません。

はい、そうです。空の文字列に設定されます。この特定のクエリとテーブル構造に有効かどうかは、JDBCの領域を超えています。

事前に別途制約を確認してから電話をかける必要があります。

0

あなたは例えば、txtFirstNameがパターンに一致しない場合にどうするかを指定するelse条件を必要とする:

if (txtFirstName.getText().matches("")){ 
    statement.setString(2, txtFirstName.getText()); 
}else { 
    throw new IllegalArgumentException("Invalid name pattern"); 
} 

これはerrorneous preparedstatementを実行するからコードを防止し、適切なエラーメッセージを表示してexceptionをスローします。

関連する問題