我的问题是,当我在JTable中突出显示一行并删除它时,它会删除所有行。我想只删除选定的行。这是我的代码:
int row = tb_records.getSelectedRow();
DefaultTableModel model= (DefaultTableModel)tb_records.getModel();
String selected = model.getValueAt(row, 0).toString();
if (row >= 0) {
model.removeRow(row);
try {
Connection conn = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "root", "hey");
PreparedStatement ps = conn.prepareStatement("delete from records where Date='"+selected+"' ");
ps.executeUpdate();
}
catch (Exception w) {
JOptionPane.showMessageDialog(this, "Connection Error!");
}
}
这可能是什么问题?如何删除数据库中的选定行而不是所有行?
答案 0 :(得分:1)
DefaultTableModel model = (DefaultTableModel) jTable.getModel();
int row = jTable.getSelectedRow();
String eve = jTable.getModel().getValueAt(row, 0).
String delRow = "delete from user where id="+eve;
try {
ps = myCon.getConnection().prepareStatement(delRow);
ps.execute();
JOptionPane.showMessageDialog(null, "Congratulation !!");
} catch (Exception e) {
JOptionPane.showMessageDialog(null, e.getMessage());
}
答案 1 :(得分:0)
1)不要显示自己的消息。显示异常中的错误消息,因为它可以更好地解释问题所在。
2)为SQL使用适当的PreparedStatement。您不太可能发生语法错误。类似的东西:
String sql = "delete from records where Date= ?";
PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setString( 1, selected );
stmt.executeUpdate();
我对SQL知之甚少,但是你可能需要传递Date对象而不是String对象,因为你的where子句使用了Date?