有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java从动态jtable更新数据库

我正在尝试从动态JTable更新数据库。这是我的密码

try {
   //open connection...
   conn = javaConnect.ConnectDb();
   //select the qualifications table row for the selected staffID
   String sql2 = "select * from QualificationsTable where qualID =" + theRowID;
   pStmt = conn.prepareStatement(sql2);
   ResultSet rs2 = pStmt.executeQuery();
   //check if QualificationsTable has content on that row...
   if (rs2.next()) {
      //it has content update...
      //get the model for the qual table...
      DefaultTableModel tModel = (DefaultTableModel) qualTable.getModel();
      for (int i = 0; i < tModel.getRowCount(); i++) {

         //get inputs from the tables
         String qualification = tModel.getValueAt(i, 0).toString();
         String yearAttained = tModel.getValueAt(i, 1).toString();

         //sql query for updating qualifications table...
         String sql3 = "update QualificationsTable set qualifications = ?, yearAttained = ? where qualID = ?";
         pStmt = conn.prepareStatement(sql3);
         //set the pareameters...
         pStmt.setString(1, qualification);
         pStmt.setString(2, yearAttained);
         pStmt.setInt(3, theRowID);
         //execute the prepared statement...
         pStmt.execute();
         // dbStatement.executeUpdate("INSERT INTO tableName VALUES('"+item+"','"+quant+"','"+unit+"','"+tot+"')");
      }
      //close connection
      conn.close();

      JOptionPane.showMessageDialog(null, "Qualifications updated successfully!", "Success", INFORMATION_MESSAGE);
   } else {
      //it doesnt have content insert...
      //get the model for the qual table...
      DefaultTableModel tModel = (DefaultTableModel) qualTable.getModel();

      for (int i = 0; i < tModel.getRowCount(); i++) {                    
          //System.out.println(tModel.getSelectedColumn()+tModel.getSelectedRow());

          //get inputs from the tables
          String qualification = tModel.getValueAt(i, 0).toString();
          String yearAttained = tModel.getValueAt(i, 1).toString();

          //sql query for storing into QualificationsTable
          String sql3 = "insert into QualificationsTable (qualifications,yearAttained,qualID) "
                   + "values (?,?,?)";
          pStmt = conn.prepareStatement(sql3);
          //set the parameters...
          pStmt.setString(1, qualification);
          pStmt.setString(2, yearAttained);
          pStmt.setInt(3, theRowID);
          //execute the prepared statement...
          pStmt.execute();

       }
       //close connection
       conn.close();
       JOptionPane.showMessageDialog(null, "Qualifications saved successfully!", "Success", INFORMATION_MESSAGE);
    }
 } catch (SQLException ex) {
    Logger.getLogger(StoreInfo.class.getName()).log(Level.SEVERE, null, ex);
 } catch(NullPointerException nfe){
    JOptionPane.showMessageDialog(infoParentTab, "Please, always hit the Enter button to effect your changes on the table", "USER ERROR!", ERROR_MESSAGE);

 }

 } else {
    JOptionPane.showMessageDialog(infoParentTab, "You must select a Staff from the Browser...", "USER ERROR!", ERROR_MESSAGE);
 }
 } catch (SQLException e) {
    JOptionPane.showMessageDialog(null, e);
    e.printStackTrace();
 }

我实际上想做的是使用一个链接到数据库的表来存储公司员工的资格。现在,资格数据库中的每个条目都通过qualID引用到员工数据库中的员工

因此,当我将资格证书存储在表中时,它还会记录拥有资格证书的员工。这将使我能够在需要时从数据库中检索特定员工的资格

如果为空,则插入数据库的段可以正常工作(即else…段)。但是更新段(即if…段)是错误的,因为代码使用JTable上的最后一行填充数据库表中的所有行,而不是在需要更新时将所有新更改复制到数据库表中

我已经尽了我所能,但毫无结果。拜托,我需要很多帮助。。。时间不在我这边。提前通知tnx的人


共 (1) 个答案

  1. # 1 楼答案

    最好的方法是使用CachedRowSet来备份JTable's模型。您将能够轻松查看、插入和更新数据

    以下是教程:Using JDBC with GUI API