-1

正如标题所述,我正在尝试编辑现有(本地)MySQL 服务器中的字段。添加和删​​除行就像一个魅力,但是当我尝试使用此代码编辑它们时:

    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

4

3 回答 3

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 条件,例如 update table set Name='test' 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();
于 2013-08-27T12:43:33.710 回答
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+"'";
于 2013-08-27T12:43:18.730 回答
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*/;
于 2013-08-27T12:43:50.070 回答