删除jtable的选定行时如何编写sql查询?

时间:2012-03-19 12:51:15

标签: java sql jtable

我的GUI上有一个jtable。 (tableRealProperty)。我需要添加,删除和更新表中的数据。这个数据来自一个数据库,它有一个名为ClientID的主键。 jtable中的列是“Location”和“Area”。  如果我从jtable中选择某一行,它当然应该从数据库中删除。我的问题是,当我点击我的删除按钮时,不仅删除了所选行,还删除了该特定客户端表中的所有数据。

这是我的删除代码:

  private void cmdDelRPropActionPerformed(java.awt.event.ActionEvent evt) {                                            
String sql = "delete FROM tblrealProperty where tblrealproperty.ClientID = ?";

    try {
    pst = conn.prepareStatement(sql);
    pst.setString(1,  txtClientID.getText());
    ((DefaultTableModel)tableRealProperty.getModel()).removeRow(tableRealProperty.getSelectedRow());
    pst.execute();
    JOptionPane.showMessageDialog(null, "Deleted");


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

}

3 个答案:

答案 0 :(得分:1)

  

如果我从jtable中选择某一行,则应将其删除为   当然,还有数据库。我的问题是,当我点击   我的删除按钮,不仅删除了所选行,还删除了所有行   某个客户的表格内的数据..

这听起来像是在客户端表上使用级联删除设置了tblrealproperty的外键。这意味着,如果从tblrealproperty中删除客户端,则还会删除所有带有外键的相应数据,该外键指向tblrealproperty中的已删除行。这是DB内部的一个物品,可以防止出现不一致。

答案 1 :(得分:1)

此查询肯定会删除具有特定ClientID的所有行。您必须在数据库中向表中添加另一列“index”,该列对于表中的每一行都是唯一的。然后删除具有以下索引的行:

 `delete FROM tblrealProperty where tblrealproperty.index = ?`

答案 2 :(得分:0)

对我来说,完美无缺,不要忘记在数据库中检查txtClientID是否为index autoincrement。如果您的表具有相似的txtClientID,则删除命令将执行删除具有相同txtClientID的所有行。