我在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) {
}
});
答案 0 :(得分: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行。
答案 1 :(得分:1)
我决定总结一下我在评论中提到的观察结果。
您的代码有几个问题
i++
和i=i-1
,这使得循环的变量不变,所以你的循环是无穷的(你已经修复了)tm.getValueAt(0,8)
。第一个参数是rowIndex
,第二个参数是columnIndex
。因此,对于每次迭代,您仍然使用第一行,而不是使用当前行。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
周期应以非大写字母开头。
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 );
}