从访问数据库更新记录选定的行 java 摆动



如何修复错误?我正在尝试更新 Jtable 行数据和微软访问数据库,但它发生了问题。

它更新访问表中的所有行,而不是所选行。

任何人都可以修复错误吗? 或者给我看代码?

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

代码中存在一些问题:

第一:您没有在Where子句中正确指定Id。因此,更新正在更新所有内容。

// 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数据。

最新更新