我用一个名为users的表创建了一个sql数据库。它包含user_id,user_name和email。我创建了一个表单,允许用户搜索任何记录并在JTable
上显示已过滤的记录。
我想根据搜索到的值删除搜索结果过滤的行,这意味着用户可以搜索user_id,user_name或email。
用户{user_id,user_name,email}
这就是我所拥有的
private void deleteSelectedRows(){
try {
String sql = "DELETE from user where ? = ?";
pst = conn.prepareStatement(sql);
pst.setString(1, searchTxt.getText());
pst.setString(2, searchTxt.getText());
((DefaultTableModel)userTable.getModel()).removeRow(userTable.getSelectedRow());
pst.execute();
} catch (Exception e){
JOptionPane.showMessageDialog(null, e);
}
}
searchTxt
是文本字段。
此代码删除表中的所有行。
如果我将其更改为DELETE from user where user_id = ?
,则只会在user_id搜索时删除该行。
答案 0 :(得分:1)
用户{user_id,user_name,email}
private void deleteSelectedRows(){
try {
String sql = "DELETE from user where ? = ?";
pst = conn.prepareStatement(sql);
pst.setString(1, searchTxt.getText());
pst.setString(2, searchTxt.getText());
((DefaultTableModel) userTable.getModel()).removeRow(userTable.getSelectedRow());
pst.execute();
} catch (Exception e){
JOptionPane.showMessageDialog(null, e);
}
}
使用该代码,您始终会完全删除该表,因为您总是在WHERE子句中获得TRUE
如果searchTxt.getText()
是"你好",准备好的陈述将是
DELETE from user where hello = hello
相当于
DELETE from user where true
或者
DELETE from user
您只需要区分searchTxt
和columnName
private void deleteSelectedRows(){
try {
String sql = "DELETE from user where ? = ?";
pst = conn.prepareStatement(sql);
pst.setString(1, columnName);
pst.setString(2, searchTxt.getText());
((DefaultTableModel) userTable.getModel()).removeRow(userTable.getSelectedRow());
pst.execute();
} catch (Exception e){
JOptionPane.showMessageDialog(null, e);
}
}