如何解决错误?我正在尝试更新Jtable行数据和Microsoft Access数据库,但是发生了问题。
它更新访问表中的所有行,而不是所选行。
任何人都可以解决该错误吗?或向我显示代码?
**My code is**
DefaultTableModel dtm = (DefaultTableModel) jTable1.getModel();
String id, fname, lname;
connection = ConnectionDb.getConnection();
try{
String value1=txtFname.getText();
String value2=txtLname.getText();
PreparedStatement preparedStatement=connection.prepareStatement("Update Student SET FirstName = '"+value1+"' , LastName ='"+value2+"' where ID = +id");
preparedStatement.execute();
int i = jTable1.getSelectedRow();
if(i >= 0)
{
jTable1.setValueAt(txtFname.getText(), i, 0);
jTable1.setValueAt(txtLname.getText(), i, 1);
}else
{
JOptionPane.showMessageDialog(null, "Error");
}
connection.commit();
}catch(Exception e){
e.printStackTrace();
}
}
答案 0 :(得分:1)
您的代码中存在一些问题:
首先:您没有在Id
子句中正确指定Where
。因此,此更新将更新所有内容。
// Your "Where" means basically "Where 1 = 1"
PreparedStatement preparedStatement=connection.prepareStatement("Update Student SET FirstName = '"+value1+"' , LastName ='"+value2+"' where ID = +id");
第二:最好使用参数,而不是简单地连接变量。这是您的操作方法:
DefaultTableModel dtm = (DefaultTableModel) jTable1.getModel();
String id, fname, lname;
connection = ConnectionDb.getConnection();
try{
String value1=txtFname.getText();
String value2=txtLname.getText();
PreparedStatement preparedStatement = connection.prepareStatement("Update Student SET FirstName = ? , LastName = ? where ID = ?");
preparedStatement.setString(1, value1);
preparedStatement.setString(2, value2);
preparedStatement.setString(3, id);
preparedStatement.execute();
// Code continues..
....
第三:您的ID值在哪里?您在第二行中创建了变量,但未在其中设置任何值。您需要检索该值并使用它来更新Student
数据。