从Access数据库中的选定行Java Swing更新记录

时间:2019-01-30 17:26:02

标签: java swing

如何解决错误?我正在尝试更新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();
       }
    }                         

1 个答案:

答案 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数据。