如何清除jTable中插入的所有数据

问题描述

我设计了一个 jTable,用于显示 MysqL DB 中表中的数据。

表名是studentrolls,主键是STRollID(int),外键是StudentID(Varchar),BachID(年)。

因此,在 jTextField 中键入 StudentID 并单击 jButton 后,jTable 中只应显示有关学生的数据。

它实际上工作但有两个问题,而不是在年份列上显示年份,而是显示日期,例如它应该显示 2020 但它显示 2020-01-01。

主要问题是,当我输入另一个 StudentID 时,它会将新结果添加到旧结果中,因此当我第一次输入 StudentID 时,我得到了很好的结果,然后当我输入另一个 StudentID 并点击我在表格中得到的按钮,新结果与第一个学生的结果混合在一起,等等...

有什么办法可以解决这个问题并在插入新结果之前清除表格吗?

这是我的代码

private void rSButtonIconDsearchstidActionPerformed(java.awt.event.ActionEvent evt) {
     try{
        String sqlqueryPastYHi = "SELECT * FROM studentrolls WHERE StudentID = ? ORDER BY BachID";
        PreparedStatement preparedStatement = con.prepareStatement(sqlqueryPastYHi);
        PreparedStatement  pst=con.prepareStatement(sqlqueryPastYHi);

        if(!jTextFieldsearchstid.getText().isEmpty() ) {
            preparedStatement.setString(1,jTextFieldsearchstid.getText());
            ResultSet resultSet = preparedStatement.executeQuery();
     
            while(resultSet.next()){
                String scolaryear = resultSet.getString("BachID");
                String stclass = resultSet.getString("ClassID");
                String totpercent = String.valueOf(resultSet.getInt("PourcentTotal"));
                String finalplace = String.valueOf(resultSet.getInt("PlaceFinale"));
                String appication = resultSet.getString("Aplication");
                String behavior = resultSet.getString("Conduite");
                String finalaction = resultSet.getString("ActionFinale");

                String pastHistTableData [] = {scolaryear,stclass,totpercent,finalplace,appication,behavior,finalaction};
                DefaultTableModel tblModel = (DefaultTableModel)jTablehipastyears.getModel();
                tblModel.addRow(pastHistTableData);
            }
        } 
        else{
            JOptionPane.showMessageDialog(this,"Veillez taper le matricule d'un eleve svp.");
        }
    }catch (Exception exception){
        JOptionPane.showMessageDialog(this,"erreur des donnees: " + exception.getMessage());
    } 
}

解决方法

有什么办法可以解决这个问题并在插入新结果之前清除表格?

DefaultTableModel tblModel = (DefaultTableModel)jTablehipastyears.getModel();
tblModel.setRowCount(0);

while (...)
{
    ....
    tblModel.addRow(...);
}                    
,

您可以尝试使用 DefaultTableModel# setValueAt(java.lang.Object,int,int)

,

感谢@camickr,我确实使用您的方法更改了以下代码并且它有效。

if(!jTextFieldsearchstid.getText().isEmpty() ) {
               
          
    preparedStatement.setString(1,jTextFieldsearchstid.getText());
    ResultSet resultSet = preparedStatement.executeQuery();
                
                
    DefaultTableModel tblModel = 
    (DefaultTableModel)jTablehipastyears.getModel();
    tblModel.setRowCount(0);
         
          while(resultSet.next()){
 
                    
                    String scolaryear = resultSet.getString("BachID");
                    String stclass = resultSet.getString("ClassID");
                    String totpercent = 
                    String.valueOf(resultSet.getInt("PourcentTotal"));
                    String finalplace = 
                    String.valueOf(resultSet.getInt("PlaceFinale"));
                    String appication = 
                    resultSet.getString("Aplication");
                    String behavior = resultSet.getString("Conduite");
                    String finalaction = 
                    resultSet.getString("ActionFinale");
              
                    String pastHistTableData [] = {scolaryear,stclass,totpercent,finalplace,appication,behavior,finalaction};


                    tblModel.addRow(pastHistTableData);


             
                }