从动态jtable更新数据库

时间:2014-08-04 14:04:36

标签: java sql database 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引用到staffs数据库中的staffID。

因此,当我将资格存储在桌面上时,它还会记录具有资格的员工。这应该使我能够在需要时从数据库中检索特定员工的资格。

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

我已尽力而为无济于事。拜托,我需要很多帮助...时间不在我身边。 tnx家伙提前

1 个答案:

答案 0 :(得分:0)

执行此操作的最佳方法是使用CachedRowSet备份JTable's模型。您将能够轻松查看,插入和更新数据。

以下是教程:Using JDBC with GUI API