数据表中的记录是
A     A     A       A      A
B     B     B       B      B在把resultset放到jtable中时,这样写:
Vector vCell = new Vector();
while (rs.next()) {
    vCell.clear();
    for (int i = 1; i <= rs.getMetaData().getColumnCount(); i++)
    vCell.add(rs.getObject(i));
    vData.add(vCell);
}
结果table中就是错误的:
A     A     A    A   A
A     A     A    A   A如果这样写:
Vector vCell = null;
while (rs.next()) {
    vCell = new Vector();
    for (int i = 1; i <= rs.getMetaData().getColumnCount(); i++)
    vCell.add(rs.getObject(i));
    vData.add(vCell);
}
结果table中就是正确的:
A     A     A       A      A
B     B     B       B      B
这是为什么??第一种写法我不是用vCell.clear()清空了吗?那应该就循环下一条记录啊!!

解决方案 »

  1.   

    如果不重新new 一个新的,也就是第一种方法,你一直操作的都是同一个Vector对象
    最后vData中所有的元素都指向同一个,内容当然同样了
      

  2.   

    这种情况就是需要每次new 一个新的出来
    比较清晰的写法是while (rs.next()) {
        Vector vCell = new Vector();
        for (int i = 1; i <= rs.getMetaData().getColumnCount(); i++)
        vCell.add(rs.getObject(i));
        vData.add(vCell);
    }把Vector的声明写在循环里面
      

  3.   

    可我不使用clear()方法清空了数据吗??
    ================================================
    如果不重新new 一个新的,也就是第一种方法,你一直操作的都是同一个Vector对象
    最后vData中所有的元素都指向同一个,内容当然同样了
      

  4.   

    java是传对象的引用,楼主你要明确这一点
    Vector a = new Vector();
    a是new创建的Vector对象的引用,真正的Vector对象实例在内存中
      

  5.   

    vData.add(vCell);
    这个add的进去的element是refence,都指向同一块内存,不是具体的字面值。当你再去枚举这个refence指向的内存的值时,他们都指向了你最后一次给他们赋的值。估计应该都是字面值"B".