下面是一段从数据库取数据,然后添加到jtable的jbinit()代码
            ResultSetMetaData rsd = null;
            Vector col = new Vector();
            Vector dat = new Vector();
            sql d = new sql();
            Connection con = null;
            con = d.date();
            Statement s = con.createStatement();
            ResultSet rs = s.executeQuery("Select * from yuangongxinxi");
            rsd = rs.getMetaData();
            int i = 0;
            for (i = 1; i <= rsd.getColumnCount(); i++) {
                col.add(rsd.getColumnName(i));
            
            } while (rs.next()) {
                Vector v = new Vector();
                for (i = 1; i <= rsd.getColumnCount(); i++) {                    v.addElement(rs.getString(i));
                }
                dat.addElement(v);
            }
            table = new JTable(dat, col);
            table.setBounds(new Rectangle(11, 0, 266, 117));
我想知道的是,这里v.addElement(rs.getString(i));已经循环取值,为什么还要将Vector实例v追加到Vector实例dat里,然后再显示出来,有什么好处吗?v和dat不是同一类吗?

解决方案 »

  1.   

    因为while (rs.next()) {
                    Vector v = new Vector();
                    for (i = 1; i <= rsd.getColumnCount(); i++) {                    v.addElement(rs.getString(i));
                    }
                    dat.addElement(v);
                }
    这段代码循环一次  V就会被重新实例化一次   如果把table = new JTable(dat, col);改为table = new JTable(V, col);的话那么V中就只有一条数据,就是循环的最后一条。其实这段代码可以写为:
    while (rs.next()) {
                  //  Vector v = new Vector();
                    for (i = 1; i <= rsd.getColumnCount(); i++) {
                        //v.addElement(rs.getString(i));
                        dat.addElement(rs.getString(i));
                    }
                   // dat.addElement(v);
                }
      

  2.   

    呵呵  都这么久了  LZ应该已经弄懂了吧!    不知道我这样解释LZ是否明白?
      

  3.   

    LS那么解释我都糊涂了,LZ可以这样取理解
    因为你的程序里没有使用BEAN来封装单条数据,而是用Vector来封装单挑数据,所以你看上去有些糊涂
    你可以理解成里面的Vector是封装的查询结果二维表力的单条数据,也就是一行。
    而外面的Vector是封装每条数据的数据集,也就好比是整个二维表。