问题描述
我设计了一个 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);
}