如何根据搜索值从jtable和sql数据库中删除搜索到的行

时间:2016-05-14 09:23:02

标签: java mysql sql-server swing

我用一个名为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搜索时删除该行。

1 个答案:

答案 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

您只需要区分searchTxtcolumnName

   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);
    }
 }