Java 在netbeans上向jtable动态添加列

Java 在netbeans上向jtable动态添加列,java,sql,swing,netbeans,jtable,Java,Sql,Swing,Netbeans,Jtable,我的代码是: private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { DefaultTableModel model=(DefaultTableModel)pl.getModel(); String urlBaseDonnes="jdbc:mysql://localhost:3

我的代码是:

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);
        }
}       
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt){
DefaultTableModel=(DefaultTableModel)pl.getModel();
字符串urlBaseDonnes=“jdbc:mysql://localhost:3306/test";
连接con;
试一试{
Class.forName(“com.mysql.jdbc.Driver”);
}捕获(ClassNotFoundException ex){
系统输出打印项次(ex);
}
试一试{
con=DriverManager.getConnection(urlBaseDonnes,“根”,“根”);
try(语句stmt=con.createStatement()){
ResultSet rs=stmt.executeQuery(“从新闻中选择*);
ResultSetMetaData rsMetaData=rs.getMetaData();
int numberOfColumns=rsMetaData.getColumnCount();
System.out.println(“结果集元数据列计数=”+numberOfColumns);
int j=0;
pl.setModel(新的javax.swing.table.DefaultTableModel(新对象[][]{},新字符串[]{“ddd”,“fgg”,“nl”}));
//获取列的名称,并对其进行更改
对于(int i=1;i
我的数据库中的数据未显示。此代码仅更改列的名称

首先访问表的TableModel:

DefaultTableModel model=(DefaultTableModel)pl.getModel(); 
pl.setModel(new javax.swing.table.DefaultTableModel(new Object [][] {},new String [] {"ddd","fgg","nl"}));
然后更改表格的表格模型:

DefaultTableModel model=(DefaultTableModel)pl.getModel(); 
pl.setModel(new javax.swing.table.DefaultTableModel(new Object [][] {},new String [] {"ddd","fgg","nl"}));
然后将数据库中的数据添加到“旧”模型中:

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

如果要创建新模型,则代码应类似于:

DefaultTableModel model = DefaultTableModel(Object[] columnNames, int rowCount);
pl.setModel( model ); 
然后,代码将把数据库数据添加到实际模型中


问题是为什么要硬编码列名?当您从数据库中执行
选择*
时,您不知道将返回多少列数据。您应该使用更通用的代码。请参阅
表fromDatabaseExample.java
代码from.

“如果我选择一个有4列的表,我将有一个错误。”那个错误是什么?我可以提前告诉你们,你们需要使用Google Fu,因为Stack Overflow和其他网站对你们的确切问题有很多答案。如果我从数据库中选择一个有4列或更多列的表,我将不得不添加列,因为我的Jtable中只有3个默认列。我不知道怎么做,我尝试了我总是失败我最近在我的JTables上遇到了一个问题,我不得不动态添加列并从.ser文件中获取数据。但是我不能理解你的问题,看我是否可以帮助我回答MarsAtomic的可能重复的问题,我已经看到了这个主题,但是当我尝试使用DefaultTableModel时它不起作用。Juxhin,我有两个问题在我的代码中,第一个是当我尝试使用tablemodel时无法将列添加到表中,结果出现错误,第二个是数据库中的数据未显示。此代码仅更改列的名称。rsMetaData.getColumnCount()返回数据库中的列数,现在我们的Jtable中有3个默认列,如果我们从数据库中选择一个类似4列的表,而不在“pl.setModel(new javax.swing.table.DefaultTableModel(new Object[][{},new String[]{“ddd”,“fgg”,“nl”})”中添加列,我们要做的是在表中动态添加一列,这样无论我们选择哪个表,我们都会得到相同的结果。@Sam您的问题没有任何意义。您的代码应该只显示数据库中的列。查询不应该有“相同的结果”如果表的列数不同。我已经给了您处理一般列数的答案。如果您不喜欢列名,则可以使用
TableColumn.setHeaderValue()更改名称
method,在您使用TableModel创建表之后。您说过我的数据没有添加到当前模型中,您能更具体地说明我如何实现这一点吗?@Sam在那句话之后,我给了您创建模型并将其添加到表中所需的两行代码,以便您的循环代码将更新t中的模型可以。我不知道如何更具体。