2013-08-27 84 views
-1

由於標題狀態,我試圖編輯和現有(本地)MySQL服務器中的字段。 添加和刪除行用得好好的,但是當我嘗試使用此代碼編輯:試圖更新我的表,而不是1行得到更新所有行得到更改

private void EditActionPerformed(java.awt.event.ActionEvent evt) {          

    try{ 
     String edit1 = lNaam.getText(); 
     String edit2 = lEmail.getText(); 
     String edit3 = lAdres.getText(); 
     String edit4 = lPlaats.getText(); 
     String edit5 = lPostcode.getText(); 
     String edit6 = lTelefoon.getText(); 
     String edit7 = lBedrijfsNaam.getText(); 

     String sql="update customers set naam='"+edit1+"',email='"+edit2+"',adres='"+edit3+"',plaats='"+edit4+"',postcode='"+edit5+"',telefoon='"+edit6+"',bedrijfsnaam='"+edit7+"'where KL_NR"; 
     preparedStatement=connect.prepareStatement(sql); 
     preparedStatement.execute(); 
    JOptionPane.showMessageDialog(null, "Updated"); 

    }catch(SQLException | HeadlessException e){ 
    JOptionPane.showMessageDialog(null, e); 
    } 
    Update_table(); 

} 

編輯:我忘了說這一點,KL_NR字段是一個AUTO_INCREMENT字段,它應該停留一樣的,我不知道放在那裏

它使編輯在短短1

http://imgur.com/6fIhrQw

這種合作代替表中的所有行德來選擇行,刪除等:

private void Table_customerMouseReleased(java.awt.event.MouseEvent evt) {            
    try{ 

    int row = Table_customer.getSelectedRow(); 
    String TClick = (Table_customer.getModel().getValueAt(row, 0).toString()); 
    String sql="select * from customers where KL_NR='"+TClick+"'"; 
    preparedStatement=connect.prepareStatement(sql); 
    resultSet=preparedStatement.executeQuery(); 
    if(resultSet.next()){ 
     String add1 =resultSet.getString("naam"); 
     lNaam.setText(add1); 
     String add2 =resultSet.getString("Email"); 
     lEmail.setText(add2); 
     String add3 =resultSet.getString("Adres"); 
     lAdres.setText(add3); 
     String add4 =resultSet.getString("Plaats"); 
     lPlaats.setText(add4); 
     String add5 =resultSet.getString("Postcode"); 
     lPostcode.setText(add5); 
     String add6 =resultSet.getString("Telefoon"); 
     lTelefoon.setText(add6); 
     String add7 =resultSet.getString("Bedrijfsnaam"); 
     lBedrijfsNaam.setText(add7); 
    } 



    }catch(Exception e){ 
     JOptionPane.showMessageDialog(null, e); 
    } 
}  

這是我刪除代碼:

private void DeleteActionPerformed(java.awt.event.ActionEvent evt) {          
    String sql ="delete from test.customers where NAAM=? "; 
    try { 
     // TODO add your handling code here: 
     preparedStatement = connect.prepareStatement(sql); 

     preparedStatement.setString(1, lNaam.getText()); 
     preparedStatement.executeUpdate(); 
     JOptionPane.showMessageDialog(null, "Deleted"); 

    } catch (SQLException ex) { 
     Logger.getLogger(DataView.class.getName()).log(Level.SEVERE, null, ex); 
    } 
    Update_table(); 
}     

我希望你能幫助我。 :S

+0

通過什麼標準,你確定要更新哪一行? – SceLus

+0

你的where子句在更新聲明中有瑕疵 – Cris

+1

請閱讀關於SQL注入 –

回答

0

你不要在你的WHERE提供了條件,

String sql="update customers set naam='"+edit1+"',email='"+edit2+"',adres='"+edit3+"',plaats='"+edit4+"',postcode='"+edit5+"',telefoon='"+edit6+"',bedrijfsnaam='"+edit7+"'where KL_NR"; 

應該像

..."+edit7+"'where /* CONDITION HERE TO UPDATE THE WANTED ROW*/; 

結束如果選擇作品的條件下,使用相同的更新除非選定的行之外還有其他標準才能知道要更新哪些內容。

int row = Table_customer.getSelectedRow(); 
String TClick = (Table_customer.getModel().getValueAt(row, 0).toString()) 
String sql="update customers set naam='"+edit1+"',email='"+edit2+"',adres='"+edit3+"',plaats='"+edit4+"',postcode='"+edit5+"',telefoon='"+edit6+"',bedrijfsnaam='"+edit7+"'where KL_NR='"+TClick+"'"; 
+0

OH dang抱歉忘了在問題中增加那一點,KL_NR是一個AUTO_INCREMENT字段,一個不會改變的字段。 – user2674895

+0

我完全忽視了你發佈的TClick解決方案,只要我閱讀它,它就記錄在我的腦海裏,就像我曾經想過的那樣><請原諒我的遲緩。 – user2674895

3

更新你應該調用executeUpdate方法

String sql="update customers set naam='"+edit1+"',email='"+edit2+"',adres='"+edit3+"',plaats='"+edit4+"',postcode='"+edit5+"',telefoon='"+edit6+"',bedrijfsnaam='"+edit7+"'where KL_NR"; 
     preparedStatement=connect.prepareStatement(sql); 
     preparedStatement.executeUpdate(); 

您的SQL字符串是不完整的意思是,你已經完成WHERE條件等設定的名稱= '測試',其中ID = 5 更新表;

另外這不是使用PreparedStatement的正確方法。

用這種方式

String sql="update customers set naam=?,email=?....." 

preparedStatement=connect.prepareStatement(sql); 
preparedStatement.setString(1,edit1); 
preparedStatement.setString(2,edit2); 
preparedStatement.executeUpdate(); 
+0

我編輯了主要問題,我忘了說一些關於where子句的內容。 – user2674895

+0

@ user2674895如果這個字段是自動增量,那麼它的一個int類型,所以使用這種方式,其中KL_NR = 2或者其中KL_NR = 3或者其中KL_NR = 4等等 – SpringLearner

+0

我知道,但是我可以選擇我想要的行(inJtable)鼠標點擊)並刪除單行,但如果我想通過您建議的方法對其進行編輯,它只會編輯硬編碼SQL命令中聲明的行。 – user2674895

0

您的更新語句必須是這樣的

String sql="update customers set naam='"+edit1+"',email='"+edit2+"',adres='"+edit3+"',plaats='"+edit4+"',postcode='"+edit5+"',telefoon='"+edit6+"',bedrijfsnaam='"+edit7+"'where KL_NR="+/*some value*/;