[英]How to save the deleted row into database?
抱歉,每個人,我重新發布我的問題。 問題是當我按下刪除按鈕時,jtable中的已刪除行消失了,但是當我重新打開jtable時,此已刪除的行沒有被刪除。 我認為問題是刪除此行時,此操作未保存到sqlite中。 請幫助我如何實施和解決我的問題。 我使用MVC來實現CRUD,而數據庫則使用sqlite。 此外,我還有一個問題? 當我按下編輯按鈕時如何實現,Jtable數據將被修改並保存到數據庫中。
我的代碼在下面
//Model
public class ClientModel extends AbstractTableModel {
private List<Client> listClient = new ArrayList<Client>();
**// delete data**
public void removeSelectedFromTable(JTable clientTable) {
int[] rows = clientTable.getSelectedRows();
TableModel tm = (DefaultTableModel) clientTable.getModel();
for (int row : rows) {
((DefaultTableModel) tm).removeRow(clientTable.convertRowIndexToModel(row));
}
clientTable.setModel(tm);
}
演示版
package demo;
@SuppressWarnings("serial")
public class SileaiFrame extends JFrame {
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
SileaiFrame Jframe = new SileaiFrame();
Jframe.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
System.out.print(e);
}
}
});
}
/**
* Create the frame.
*
* @throws ParseException
*/
@SuppressWarnings("rawtypes")
public SileaiFrame() throws ParseException {
setTitle("Database Management");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 793, 477);
exportMenuBar = new JMenuBar();
setJMenuBar(exportMenuBar);
clientLayeredPane = new JLayeredPane();
jftp_0.addTab("Client information", null, clientLayeredPane, null);
GridBagLayout gbl_clientLayeredPane = new GridBagLayout();
gbl_clientLayeredPane.columnWidths = new int[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
gbl_clientLayeredPane.rowHeights = new int[] { 0, 0, 0, 0, 0, 0, 0 };
gbl_clientLayeredPane.columnWeights = new double[] { 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 0.0,
Double.MIN_VALUE };
gbl_clientLayeredPane.rowWeights = new double[] { 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, Double.MIN_VALUE };
clientLayeredPane.setLayout(gbl_clientLayeredPane);
categoryComboBox = new JComboBox();
categoryComboBox.setEditable(true);
categoryComboBox.setModel(new DefaultComboBoxModel(new String[] { "Activity", "Member", "Donation", "Company"}));
GridBagConstraints gbc_categoryComboBox = new GridBagConstraints();
gbc_categoryComboBox.fill = GridBagConstraints.HORIZONTAL;
gbc_categoryComboBox.insets = new Insets(0, 0, 5, 5);
gbc_categoryComboBox.gridx = 1;
gbc_categoryComboBox.gridy = 0;
clientLayeredPane.add(categoryComboBox, gbc_categoryComboBox);
organizationTextField = new JTextField();
GridBagConstraints gbc_organizationTextField = new GridBagConstraints();
gbc_organizationTextField.fill = GridBagConstraints.HORIZONTAL;
gbc_organizationTextField.insets = new Insets(0, 0, 5, 5);
gbc_organizationTextField.gridx = 3;
gbc_organizationTextField.gridy = 0;
clientLayeredPane.add(organizationTextField, gbc_organizationTextField);
organizationTextField.setColumns(10);
nameTextField = new JTextField();
GridBagConstraints gbc_nameTextField = new GridBagConstraints();
gbc_nameTextField.fill = GridBagConstraints.HORIZONTAL;
gbc_nameTextField.insets = new Insets(0, 0, 5, 5);
gbc_nameTextField.gridx = 5;
gbc_nameTextField.gridy = 0;
clientLayeredPane.add(nameTextField, gbc_nameTextField);
nameTextField.setColumns(10);
noTextField = new JTextField();
GridBagConstraints gbc_noTextField = new GridBagConstraints();
gbc_noTextField.insets = new Insets(0, 0, 5, 5);
gbc_noTextField.fill = GridBagConstraints.HORIZONTAL;
gbc_noTextField.gridx = 7;
gbc_noTextField.gridy = 0;
clientLayeredPane.add(noTextField, gbc_noTextField);
noTextField.setColumns(10);
zipTextField = new JTextField();
GridBagConstraints gbc_zipTextField = new GridBagConstraints();
gbc_zipTextField.insets = new Insets(0, 0, 5, 5);
gbc_zipTextField.fill = GridBagConstraints.HORIZONTAL;
gbc_zipTextField.gridx = 1;
gbc_zipTextField.gridy = 1;
clientLayeredPane.add(zipTextField, gbc_zipTextField);
zipTextField.setColumns(10);
addressTextField = new JTextField();
GridBagConstraints gbc_addressTextField = new GridBagConstraints();
gbc_addressTextField.fill = GridBagConstraints.HORIZONTAL;
gbc_addressTextField.gridwidth = 2;
gbc_addressTextField.insets = new Insets(0, 0, 5, 5);
gbc_addressTextField.gridx = 3;
gbc_addressTextField.gridy = 1;
clientLayeredPane.add(addressTextField, gbc_addressTextField);
addressTextField.setColumns(10);
cellnumberTextField = new JTextField();
cellnumberTextField.setColumns(10);
GridBagConstraints gbc_cellnumberTextField = new GridBagConstraints();
gbc_cellnumberTextField.fill = GridBagConstraints.HORIZONTAL;
gbc_cellnumberTextField.anchor = GridBagConstraints.WEST;
gbc_cellnumberTextField.insets = new Insets(0, 0, 5, 5);
gbc_cellnumberTextField.gridx = 1;
gbc_cellnumberTextField.gridy = 2;
clientLayeredPane.add(cellnumberTextField, gbc_cellnumberTextField);
faxLabel = new JLabel("fax");
GridBagConstraints gbc_faxLabel = new GridBagConstraints();
gbc_faxLabel.insets = new Insets(0, 0, 5, 5);
gbc_faxLabel.gridx = 2;
gbc_faxLabel.gridy = 2;
clientLayeredPane.add(faxLabel, gbc_faxLabel);
faxTextField = new JTextField();
GridBagConstraints gbc_faxTextField = new GridBagConstraints();
gbc_faxTextField.insets = new Insets(0, 0, 5, 5);
gbc_faxTextField.fill = GridBagConstraints.HORIZONTAL;
gbc_faxTextField.gridx = 3;
gbc_faxTextField.gridy = 2;
clientLayeredPane.add(faxTextField, gbc_faxTextField);
faxTextField.setColumns(10);
emailLabel = new JLabel("email");
GridBagConstraints gbc_emailLabel = new GridBagConstraints();
gbc_emailLabel.insets = new Insets(0, 0, 5, 5);
gbc_emailLabel.gridx = 4;
gbc_emailLabel.gridy = 2;
clientLayeredPane.add(emailLabel, gbc_emailLabel);
emailTextField = new JTextField();
GridBagConstraints gbc_emailTextField = new GridBagConstraints();
gbc_emailTextField.insets = new Insets(0, 0, 5, 5);
gbc_emailTextField.fill = GridBagConstraints.HORIZONTAL;
gbc_emailTextField.gridx = 5;
gbc_emailTextField.gridy = 2;
clientLayeredPane.add(emailTextField, gbc_emailTextField);
emailTextField.setColumns(10);
JDateChooser birthdayDateChooser = new JDateChooser();
birthdayDateChooser.setDateFormatString("yyyy-MM-dd");
GridBagConstraints gbc_birthdayDateChooser = new GridBagConstraints();
gbc_birthdayDateChooser.fill = GridBagConstraints.HORIZONTAL;
birthdayDateChooser.setBounds(20, 20, 200, 20);
gbc_birthdayDateChooser.insets = new Insets(0, 0, 5, 5);
gbc_birthdayDateChooser.gridx = 1;
gbc_birthdayDateChooser.gridy = 3;
clientLayeredPane.add(birthdayDateChooser, gbc_birthdayDateChooser);
label = new JLabel("~");
GridBagConstraints gbc_label = new GridBagConstraints();
gbc_label.insets = new Insets(0, 0, 5, 5);
gbc_label.gridx = 2;
gbc_label.gridy = 3;
clientLayeredPane.add(label, gbc_label);
search1DateChooser = new JDateChooser();
GridBagConstraints gbc_search1DateChooser = new GridBagConstraints();
gbc_search1DateChooser.fill = GridBagConstraints.HORIZONTAL;
gbc_search1DateChooser.insets = new Insets(0, 0, 5, 5);
gbc_search1DateChooser.gridx = 3;
gbc_search1DateChooser.gridy = 3;
clientLayeredPane.add(search1DateChooser, gbc_search1DateChooser);
JButton createButton = new JButton("add");
GridBagConstraints gbc_createButton = new GridBagConstraints();
gbc_createButton.insets = new Insets(0, 0, 5, 5);
gbc_createButton.gridx = 4;
gbc_createButton.gridy = 4;
clientLayeredPane.add(createButton, gbc_createButton);
readButton = new JButton("search");
GridBagConstraints gbc_readButton = new GridBagConstraints();
gbc_readButton.insets = new Insets(0, 0, 5, 5);
gbc_readButton.gridx = 5;
gbc_readButton.gridy = 4;
clientLayeredPane.add(readButton, gbc_readButton);
deleteButton = new JButton("delete");
deleteButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
cm.removeSelectedFromTable(clientTable);
categoryComboBox.setSelectedItem("");
organizationTextField.setText("");
nameTextField.setText("");
noTextField.setText("");
zipTextField.setText("");
addressTextField.setText("");
cellnumberTextField.setText("");
faxTextField.setText("");
emailTextField.setText("");
birthdayDateChooser.setDate(null);
}
});
GridBagConstraints gbc_deleteButton = new GridBagConstraints();
gbc_deleteButton.insets = new Insets(0, 0, 5, 5);
gbc_deleteButton.gridx = 6;
gbc_deleteButton.gridy = 4;
clientLayeredPane.add(deleteButton, gbc_deleteButton);
updateButton = new JButton("modify");
updateButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
});
GridBagConstraints gbc_updateButton = new GridBagConstraints();
gbc_updateButton.insets = new Insets(0, 0, 5, 5);
gbc_updateButton.gridx = 7;
gbc_updateButton.gridy = 4;
clientLayeredPane.add(updateButton, gbc_updateButton);
clientScrollPane = new JScrollPane();
GridBagConstraints gbc_clientScrollPane = new GridBagConstraints();
gbc_clientScrollPane.gridwidth = 9;
gbc_clientScrollPane.fill = GridBagConstraints.BOTH;
gbc_clientScrollPane.gridx = 0;
gbc_clientScrollPane.gridy = 5;
clientLayeredPane.add(clientScrollPane, gbc_clientScrollPane);
clientTable = new JTable();
clientTable.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent arg0) {
categoryComboBox.setSelectedItem(clientTable.getValueAt(clientTable.getSelectedRow(), 0).toString());
organizationTextField.setText(clientTable.getValueAt(clientTable.getSelectedRow(), 1).toString());
nameTextField.setText(clientTable.getValueAt(clientTable.getSelectedRow(), 2).toString());
noTextField.setText(clientTable.getValueAt(clientTable.getSelectedRow(), 3).toString());
zipTextField.setText(clientTable.getValueAt(clientTable.getSelectedRow(), 4).toString());
addressTextField.setText(clientTable.getValueAt(clientTable.getSelectedRow(), 5).toString());
landlineTextField.setText(clientTable.getValueAt(clientTable.getSelectedRow(), 6).toString());
cellnumberTextField.setText(clientTable.getValueAt(clientTable.getSelectedRow(), 7).toString());
faxTextField.setText(clientTable.getValueAt(clientTable.getSelectedRow(), 8).toString());
emailTextField.setText(clientTable.getValueAt(clientTable.getSelectedRow(), 9).toString());
birthdayDateChooser.setDate((java.util.Date) clientTable.getValueAt(clientTable.getSelectedRow(), 10));
}
});
clientScrollPane.setViewportView(clientTable);
LoadData();
activityLayeredPane = new JLayeredPane();
}
private void LoadData() {
DefaultTableModel dtm = new DefaultTableModel();
dtm.addColumn("category");
dtm.addColumn("organization");
dtm.addColumn("name");
dtm.addColumn("id");
dtm.addColumn("zip");
dtm.addColumn("address");
dtm.addColumn("cellnumber");
dtm.addColumn("fax");
dtm.addColumn("email");
dtm.addColumn("birthday");
for (Client client : cm.findAll()) {
dtm.addRow(new Object[] { client.getCategory(), client.getOrganization(), client.getName(), client.getNo(),
client.getZip(), client.getAddress(), client.getCellnumber(), client.getFax(),
client.getEmail(), client.getBirthday() });
}
this.clientTable.setModel(dtm);
}
}
快速瀏覽您提供的代碼后,我發現我找不到包含DELETE FROM...WHERE
查詢的Statment
或PreparedStatment
:
PreparedStatement df = ConnectDB.getConn().prepareStatement("DELETE FROM client WHERE organization = ? AND name = ? AND...");
df.execute();
如果您實際上並未在表或數據庫上執行DELETE FROM...
查詢,則不會刪除任何內容。 您從模型中刪除項目,但從數據庫中刪除項目。 看來您需要添加PreparedStatment
到removeSelectedFromTable(JTable clientTable)
,該表將構建並執行DELETE FROM...
查詢。 如果您每次重新加載JTable
時都從數據庫中重新加載,這將解決您的問題。
注意,在上面的示例中,我在DELETE FROM...
PreparedStatment
示例中顯式使用了organization
和name
。
如MadProgrammer所述,如果您每次使用(row : rows)
從表中刪除,或每次刪除行時都基於模型中基於索引的類似內容,則索引將更改。 這意味着您很可能最終每次都會刪除第一行之后的錯誤行集。
我建議您使用WHERE
子句構建DELETE FROM...
,該子句使用其他幾列,例如名稱和組織,以便您增加刪除預期行並刪除的機會。表模型中的行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.