2016-05-14 17 views
0

我創建了一個名爲users的表的sql數據庫。它包含user_id,user_name和電子郵件。我創建了一個表單,允許用戶搜索任何記錄並在JTable上顯示過濾的記錄。如何根據搜索值從jtable和sql數據庫中刪除搜索到的行

我想根據搜索值刪除搜索結果過濾器的行,這意味着用戶可以搜索user_id,user_name或email。

用戶{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); 
    } 
} 

searchTxt是文本字段。 此代碼刪除我的表中的所有行。

如果我將其更改爲DELETE from user where user_id = ?,它只會在通過user_id搜索時刪除該行。

回答

1

用戶{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()是「你好」,準備的語句將

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

謝謝。這是一個很好的解釋。由於涉及多個列,我是否使用多個列名? –

+0

@TLin但是,您還必須使用不同的searchTxt,每個columnName一個,並且如果不是所有字段都用於搜索,則必須以非常的方式構建查詢。如果答案是有用的,那麼請將其標記爲接受。 – RubioRic

+1

我使用了一個組合框,並修復了基於從組合框中選擇的值的搜索,它工作正常!謝謝你,你的批准正在進行中! –