2012-09-07 3 views
1

У меня есть 3 строки в таблице tablemodel.each, состоящей из 9 столбцов (o-8) .i хочу обновить последний столбец каждой строки ... но теперь я могу обновить только 1-й ряд последних столбцов..pls help..`Как я могу обновить несколько столбцов столбцов таблицы?

` 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) 'to' 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, и вы должны пройти индексы строк вы хотите обновить, но вы только у строка pdate 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. Таким образом, вам нужно уменьшить переменную 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); 
    } 
    
Смежные вопросы