JTable没有显示超过5列

时间:2015-01-27 21:44:11

标签: java swing sql-server-2008 netbeans jtable

我需要通过JTABLE显示来自表格的数据,我用谷歌搜索了几个小时,最后成功找到了执行此操作的代码,并且工作正常但是有一个问题来自netbeans我认为

这是我的桌子 enter image description here

它有6列,

这是我的jtable enter image description here

这就是结果 enter image description here

现在发布到这里之前我尽力去谷歌或阅读关于jtables的oracle文档,无法找到关于这个奇怪问题的任何事情, 如果我使用4列,它显示4列数据,我从设计增加1列,它开始显示5列数据(完美),当我最后添加1个最后一列,它仍然显示5列数据

这是代码

   try {
        MyConnection mc = new MyConnection();
        Class.forName(mc.driver);
        Connection connect = DriverManager.getConnection(mc.login);
        Statement smt = connect.createStatement();
        ResultSet rs = smt.executeQuery("select * from library_member");
        ResultSetMetaData rsmeta = rs.getMetaData();
        int columns = rsmeta.getColumnCount();
        DefaultTableModel dtm = new DefaultTableModel();
        Vector columns_name = new Vector(), data_rows = new Vector();

        for(int i = 1; i < columns; i++){
            columns_name.addElement(rsmeta.getColumnName(i));
        }

        dtm.setColumnIdentifiers(columns_name);

        while(rs.next()){
            data_rows = new Vector();
            for(int j = 1; j < columns; j++){
                data_rows.addElement(rs.getString(j));
            }
            dtm.addRow(data_rows);
        }

        jTable1.setModel(dtm);

    } catch (Exception ex) {
        ex.printStackTrace();
    }

P.S它没有显示的列我觉得因为member_email得到1个空值,如果是真的,应该如何允许它,

问题!! :如何从4增加rowCount?它在netbeans designview中无法使用,我没有足够的时间自己创建一个jtable


我在member_id = 2更新了member_email,仍未显示:(

1 个答案:

答案 0 :(得分:3)

你的计算不正确。在for循环中将i = 1更改为i = 0.

    for(int i = 0; i < columns; i++){
        columns_name.addElement(rsmeta.getColumnName(i+1));
    }

以及:

        for(int j = 0; j < columns; j++){
            data_rows.addElement(rs.getString(j+1));

        }

另请注意MadProgrammer的评论,即JDBC行索引从1开始,而不是0.这就是为什么你还需要getColumnName(i + 1)和getString(j + 1)。

或者你可以在你的循环中从1开始计数并测试&lt; =列,如:

    for(int i = 1; i <= columns; i++){
        columns_name.addElement(rsmeta.getColumnName(i));
    }