在netbeans上动态地将列添加到jtable

时间:2014-08-23 17:33:54

标签: java sql swing netbeans jtable

我的代码是:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    DefaultTableModel model=(DefaultTableModel)pl.getModel();               
        String urlBaseDonnes="jdbc:mysql://localhost:3306/test";
        Connection con;
        try{
        Class.forName("com.mysql.jdbc.Driver");
        }catch(ClassNotFoundException ex){
            System.out.println(ex);
        }
        try{
            con =DriverManager.getConnection(urlBaseDonnes,"root","");
        try (Statement stmt = con.createStatement()) {
            ResultSet rs = stmt.executeQuery("SELECT * FROM news");
            ResultSetMetaData rsMetaData = rs.getMetaData();
            int numberOfColumns = rsMetaData.getColumnCount();
            System.out.println("resultSet MetaData column Count=" + numberOfColumns);
            int j=0;
            pl.setModel(new javax.swing.table.DefaultTableModel(new Object [][] {},new String [] {"ddd","fgg","nl"}));

            // get the name of the column, and changing it

            for (int i = 1 ; i <= numberOfColumns; i++) {
                ChangeName(pl,j,rsMetaData.getColumnName(i));
                System.out.println(rsMetaData.getColumnName(i));
                System.out.println(j);
                j= j+1;
            }
            String query="SELECT * FROM news";
            rs=stmt.executeQuery(query);

            //Show the database

            while(rs.next()){
                String id=rs.getString("id");
                String titre=rs.getString("titre");
                String contenu=rs.getString("contenu");  
                model.addRow(new Object[]{id,titre,contenu});
            }
            rs.close();
        }
        con.close();
        System.out.println("close the database");
        }catch(SQLException ex){
            System.out.println(ex);
        }
}       

我的目标是在更改表的名称时动态更改列的名称,此代码可以更改列的名称,但是当它显示数据库的内容时它不起作用,我不能添加列,例如,如果我选择一个有4列的表,我将有一个错误。我尝试使用DefaultTableModel添加列,但它不起作用。 你可以帮助我动态添加列吗?并告诉我为什么这段代码没有显示数据库中的内容? 感谢

1 个答案:

答案 0 :(得分:2)

  

我的数据库中的数据未显示。此代码仅更改列的名称。

首先,您访问表格的TableModel:

DefaultTableModel model=(DefaultTableModel)pl.getModel(); 

然后更改表的TableModel:

pl.setModel(new javax.swing.table.DefaultTableModel(new Object [][] {},new String [] {"ddd","fgg","nl"}));

然后将数据库中的数据添加到&#34; old&#34;模型:

model.addRow(new Object[]{id,titre,contenu});

因此数据不会添加到当前模型中。

如果您想创建一个新模型,那么您的代码应该是:

DefaultTableModel model = DefaultTableModel(Object[] columnNames, int rowCount);
pl.setModel( model ); 

然后您的代码会将数据库数据添加到真实模型中。

问题是为什么要尝试对列名进行硬编码?当您从数据库中执行select *时,您不知道将返回多少列数据。您应该使用更通用的代码。请参阅Table From Database中的TableFromDatabaseExample.java代码。