1

我在tablemodel中有3行。每行包含9列(o-8)。我想更新每一行的最后一列......但现在我只能更新第一行最后一列..请帮助..`

   ` SAVE=new JButton("SAVE");
     SAVE.addActionListener(new java.awt.event.ActionListener() {  
      public void actionPerformed(java.awt.event.ActionEvent e) {  
      String Status=null ;
      DbUtility ViewAbsenties=new DbUtility();
      ViewAbsenties. loadDriver();
      ViewAbsenties.connect();
      TableModel tm;
      tm = table3.getModel();
      int i = table3.getRowCount();
      System.out.println("row count"+i);

          try{
            while(i!=0){
              Status   =(String) tm.getValueAt(0,8);
              String Employeeid = (String) tm.getValueAt(i,0);
              System.out.println("Status: " + Status);
              System.out.println("Employeeid: " + Employeeid);
              ViewAbsenties.executeUpdateQuery2(Status,Employeeid);
              System.out.println("i"+i);
               i=i-1;

                  }}
            catch (Exception e5) {

                }
          });   
4

2 回答 2

2

你应该使用

Status   =(String) tm.getValueAt(i,8);
String Employeeid = (String) tm.getValueAt(i,0);

代替

Status   =(String) tm.getValueAt(0,8);
String Employeeid = (String) tm.getValueAt(0,0);

getValueAt 中的第一个参数是 rowIndex,您应该传递要更新的行的索引,但您只能在循环中更新第 0 行。

于 2012-09-07T06:51:49.340 回答
1

我决定总结一下我在评论中提到的观察结果。

您的代码有几个问题

  • 在你调用的同一个循环循环中i++i=i-1这使得循环的变体是不变的,所以你的循环是无限的(你已经修复了)
  • 你还在打电话tm.getValueAt(0,8)。第一个参数是rowIndex,第二个是 a columnIndex。因此,对于每次迭代,您仍然使用第一行,而不是当前行。
  • Java 通常索引模型和数组 from 0tolength - 1但你是从lengthto迭代1。所以你需要通过降低i变量1

有固定代码:

int i = table3.getRowCount() - 1;
while( i >= 0 ){

          Status = (String) tm.getValueAt( i, 8 );
          String Employeeid = (String) tm.getValueAt( i, 0 );

          System.out.println( "Status: " + Status );
          System.out.println( "Employeeid: " + Employeeid );

          ViewAbsenties.executeUpdateQuery2( Status, Employeeid );

          System.out.println( "i" + i );
          i = i - 1;
}

注意: 无论如何,我有几点意见可以改善您的代码风格:

  • 上面的例子是for循环的确切用例
  • 基于 Java 约定的变量名应该以非大写字母开头。

    for ( int i = 0; i < table3.getRowCount(); ++i ) {
          status = (String) tm.getValueAt( i, 8 );
          String employeeid = (String) tm.getValueAt( i, 0 );
    
          System.out.println( "Status: " + status );
          System.out.println( "Employeeid: " + employeeid );
    
          ViewAbsenties.executeUpdateQuery2( status, employeeid );
    
          System.out.println( "i" + i );
    }
    
于 2012-09-07T07:05:17.733 回答