我创建了一个 SQL 数据库,其中包含一个名为 users 的表。它保存 user_id、user_name 和 email。我创建了一个表单,允许用户搜索任何记录并在 JTable
上显示过滤后的记录。
我想删除搜索结果根据搜索值过滤的行,这意味着用户可以搜索 user_id、user_name 或电子邮件。
users {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 搜索时删除该行。
最佳答案
用户{user_id、user_name、电子邮件}
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()
是“hello”,准备好的语句将为
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);
}
}
关于java - 如何根据搜索值从jtable和sql数据库中删除搜索行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37224926/