2013-05-06 15 views
1

用戶通過8個JTextFields輸入他的信息。此信息通過參數傳遞到updateUser方法,並且該方法使用此信息更新SQL表。這是我目前正在做雖然當用戶按下更新按鈕,不更改數據庫表將數據參數傳遞給更新SQL表

做檢索用戶數據,創建UserOperation並調用UpdateUser兩個方法

String userName = textFieldUserName.getText(); 
       String userPassword = textField_1.getText(); 
       String securityQuestion = textFieldSecQuestion.getText(); 
       String securityAnswer = textFieldAnswer.getText(); 
       String email = textFieldEmail.getText(); 
       String fName = textFieldName.getText(); 
       String phoneNumber = textFieldPhone.getText(); 
       String department = textFieldDepartment.getText(); 

       UserOperations userOperations = new UserOperations(); 
       userOperations.updateUser(userName, userPassword, securityQuestion, securityAnswer, email, fName, phoneNumber, department); 

的UpdateUser兩個方法

 public void updateUser (String userName, String userPassword, String securityQuestion, String securityAnswer, String email, String fName, String phoneNumber, String department) 
    { 

     try 
     { 
      String sql = "UPDATE systeuser SET username = ?,userpassword = ?,securityquestion = ?,securityanswer = ?,email = ?,fname = ?,phonenumber = ?,department = ? WHERE username = ?"; 
       stmt = conn.prepareStatement(sql); 
       stmt.setString (1, userName); 
       stmt.setString (2, userPassword); 
       stmt.setString (3, securityQuestion); 
       stmt.setString (4, securityAnswer); 
       stmt.setString (5, email); 
       stmt.setString (6, fName); 
       stmt.setString (7, phoneNumber); 
       stmt.setString (8, department); 
       stmt.setString (9, userName); 
       stmt.executeUpdate(); 
     } 
     catch (Exception e) 
     { 
      e.printStackTrace (); 

     } 

    } 
+0

刪除'?'前的所有引號當您使用PrepareStatement創建語句時,它不需要任何引號,因爲我們在語句中使用了SetString和setInt。 – 2013-05-06 11:19:33

+0

[列索引無效,使用PreparedStatement更新](http://stackoverflow.com/questions/9384804/invalid-column-index-update-using-preparedstatement) – 2013-05-06 11:22:56

回答

3

因爲放在?圍繞單引號的啓示。你不必給那些單引號,因爲你這樣做: -

stmt.setString(1, userName); // setString says that this parameter is a String 

因此,通常用於在查詢附上String單引號不需要你的情況。

+0

感謝您的回覆。我已經刪除了來自各地的單引號。我按下更新按鈕時不會再出現錯誤,但當我自己檢入數據庫時​​,更新沒有發生。你能看到SQL語句本身有什麼問題嗎? – 2013-05-06 11:22:31

+0

有兩件事讓我想知道你爲什麼這樣做!首先,爲什麼根據你更新其他'fields'來更新'username'?接下來,爲什麼要調用'executeQuery()'和'executeUpdate()'。只是'executeUpdate()'應該做的!看看這個,看看它是否有所作爲!此外,「表」的名稱,我猜它不適合或可能是一個錯字! – SudoRahul 2013-05-06 11:25:33

+0

我編輯了我的主帖。 1.我不明白你的第一個問題,我在SQL語句中使用用戶名來更新表的正確行。 2.謝謝指出,我已經刪除了executeQuery()。表的名稱是正確的,我已經在另一個項目中有一個systemuser表 – 2013-05-06 11:37:50

0

不要將使用查詢參數的問號放在引號中。相反,使用:

UPDATE systeuser SET username = ?, userpassword = ?, ...