2012-09-07 15 views
1

我有3行tablemodel.each行conatining 9列(o-8)。我想更新每行的最後一列...但現在我只能更新第1行最後一列..請幫助...'我如何更新表模型多行列?

` 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) { 

       } 
      }); 
+0

它工作嗎?因爲在我看來,在一個循環週期中,你有'i ++'和'i = i-1',這使得'i'變量對於循環條件不變。它看起來像一個無限循環。我想你的問題的解決方案在於,因此刪除'i ++'語句,將'tm.getValueAt(0,0)'修復爲'tm.getValueAt(i,0)',你應該沒問題。 – Gaim

+0

tm.getValueAt(i,0);我試過了,但現在我沒有得到任何結果 – learner

+0

你在循環的第一行仍然有'tm.getValueAt(0,8)'。我想你想要獨立處理每個表格行。此外,我只是注意到你初始化'int i = table3.getRowCount();'並且當你調用'tm.getValueAt(i,0)'的時候。我不知道它是如何做到的,但是在Java中,數組,模型等通常從'0'索引到'length - 1',但是您將它們從'1'調用到'length'。所以我建議你修正以下問題:'int i = table3.getRowCount() - 1;'和while(i> = 0)'。順便說一句,我認爲這是'for'循環的好用例,而不是'while'。這將更具可讀性 – Gaim

回答

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行。

+0

很好地發現:-)順便說一句,你可能會考慮看看[格式化幫助](http://stackoverflow.com/editing-help) – kleopatra

1

我決定總結我上面在評論中提到的觀察結果。

您的代碼有一對夫婦在你打電話i++i=i-1這使得週期的變型是不變的同一循環週期的問題

  • ,所以你的循環是無止境的(你已經固定的)
  • 您仍在撥打tm.getValueAt(0,8)。第一個參數是rowIndex,第二個參數是columnIndex。因此,對於每一次迭代,您仍然使用第一行,而不是當前使用的那一行。
  • Java通常會將模型和數組從0索引到length - 1,但是您將從length重複爲1。因此,你需要通過1

有固定的代碼來降低可變i

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); 
    }