我的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);
}
}
答案 0 :(得分:1)
如果我从jtable中选择某一行,则应将其删除为 当然,还有数据库。我的问题是,当我点击 我的删除按钮,不仅删除了所选行,还删除了所有行 某个客户的表格内的数据..
这听起来像是在客户端表上使用级联删除设置了tblrealproperty的外键。这意味着,如果从tblrealproperty中删除客户端,则还会删除所有带有外键的相应数据,该外键指向tblrealproperty中的已删除行。这是DB内部的一个物品,可以防止出现不一致。
答案 1 :(得分:1)
此查询肯定会删除具有特定ClientID的所有行。您必须在数据库中向表中添加另一列“index”,该列对于表中的每一行都是唯一的。然后删除具有以下索引的行:
`delete FROM tblrealProperty where tblrealproperty.index = ?`
答案 2 :(得分:0)
对我来说,完美无缺,不要忘记在数据库中检查txtClientID
是否为index
autoincrement
。如果您的表具有相似的txtClientID
,则删除命令将执行删除具有相同txtClientID
的所有行。