2011-10-18 131 views
0

我想用Java Swing更新mysql記錄。似乎MySql Update語句存在一些問題。我已經粘貼代碼下:Java的Mysql更新語句

conDBase = getConnection(); 
stmt = conDBase.createStatement(); 

String sql = "update user set role = " + jComboBox1.getSelectedItem()+ "where userID =" + jComboBox2.getSelectedItem(); 

stmt.executeUpdate(sql); 
conDBase.close(); 
JOptionPane.showMessageDialog(null, "User Role Updated"); 
this.dispose(); 
new Admin().setVisible(true); 
+0

什麼是你所面臨的問題? – Vaandu

+1

您無法使用Java Swing更新MySQL行。 – EJP

回答

6

嗯,至少有兩個問題與您的代碼:

  • 您沒有使用準備好的語句,這意味着你已經離開了自己開用於SQL注入。 (你甚至沒有引用您使用這有可能算作是第三個問題的值。)
  • 你沒有的「where」子句之前有一個空間

我懷疑這是你注意到後面的問題現在,但你應該肯定修復代碼以使用準備好的語句以及。

哦,你可能不應該做任何這樣的UI線程(或從非UI線程訪問UI控件)要麼...

4

我不知道是什麼錯誤你會得到(也許你可以發佈一些細節)。

但是,下面的行需要改變:

String sql = "update user set role = " + jComboBox1.getSelectedItem()+ " where userID =" + jComboBox2.getSelectedItem() + ";"; 

的通知「其中」前的空間,並在聲明的末尾分號。

一個更好的版本會是什麼樣子:

public int updateRoleForUser (String role, Integer userId) throws Exception { 

int i = 0; 

String sql = 
      " update user " 
      + " set role = ?" 
      + " where userId = ?;"; 

    try { 
     conDBase = getConnection(); 
     ps = conDBase.prepareStatement(sql); 
     ps.setString(1, role); 
     ps.setInt(2, userId); 

     i = ps.executeUpdate(); 
    } catch (Exception e) { 
     // do something with Exception here. Maybe just throw it up again 
    } finally { 
     closeConnection(); 
     return i; 
    } 
}; 

然後調用使用您的組合框的值的方法。

你真的應該把一大堆進入的方法的DAO類的一些描述中,然後通過在角色和用戶id值作爲參數;

1

您必須在引號和「where」之間留出空格。就像這樣:

...getSelectedItem() + " where... 

,因爲,如果沒有,你會得到這樣的:

...set role = 25where userId...