【问题标题】:Not show column name from database on Jtable不显示 Jtable 上数据库中的列名
【发布时间】:2014-01-10 01:42:50
【问题描述】:

我编写程序从数据库中检索数据以显示在JTable 上。该程序可以在没有错误的情况下运行,但它不显示列名。代码如下:

    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
    Connection dbcon = DriverManager.getConnection("" +"jdbc:sqlserver://localhost;databaseName=Store;user=sa;password=t81iS17Zxj");
    Statement sqlstatement = dbcon.createStatement();
    ResultSet dbresultset = sqlstatement.executeQuery("select * from Store.dbo.Product");
    rsmetadata = dbresultset.getMetaData();       // Get metadata on them
    numcols = rsmetadata.getColumnCount();    // How many columns?
    //  Get column names

    for (int i = 1; i <= numcols; i++)
    {
        defaultmodel.addColumn( rsmetadata.getColumnName(i));
    }
    //  Get row data

    while (dbresultset.next())
    {
        Vector<Object> row = new Vector<Object>(numcols);

        for (int i = 1; i <= numcols; i++)
        {
            row.addElement( dbresultset.getObject(i) );
        }

        defaultmodel.addRow(row );
    }

我尝试将rsmetadata.getColumnName(i) 的值打印出来,然后Eclipse 显示列名,但为什么在上面没有显示。

【问题讨论】:

  • 你如何显示你的 JTable?您将其存储在哪种组件中?

标签: java sql swing jtable awt


【解决方案1】:

程序可以正常运行但不显示列名。

仅当您将表添加到 JScrollPane 时才会显示列名。所以在你的代码中的某个地方你需要这样的东西:

JTable table = new JTable(...);
JScrollPane scrollPane = new JScrollPane( table );
panel.add( scrollPane );

对于完整的工作示例,您可以使用Table From Database 中的Table From Database Example

【讨论】:

    【解决方案2】:

    试试下面的代码:-

    此代码返回包含数据库数据的列名

          int col_count=0;
    
          Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
          Connection dbcon = DriverManager.getConnection("" +"jdbc:sqlserver://localhost;databaseName=Store;user=sa;password=t81iS17Zxj");
          Statement sqlstatement = dbcon.createStatement();
          ResultSet dbresultset = sqlstatement.executeQuery("select * from Store.dbo.Product");
    
    
         Vector column_name=new Vector();   
         column_name=new Vector();   
        ResultSetMetaData rsm= dbresultset .getMetaData();
         col_count=rsm.getColumnCount();
    
        for(int a=0;a<col_count;a++)
          {
             column_name.addElement(rsm.getColumnLabel(a+1)); 
    
          }
    
        Vector newRow=null,nRow;
        Vector row=new Vector();
    
        while(dbresultset .next())
        {
            newRow =new Vector();
           for(int j=0;j<col_count;j++)
            {
             newRow.addElement(dbresultset .getObject(j+1));
             }
    
             row.addElement(newRow);
    
            }
    
         DefaultTableModel model= new DefaultTableModel(row, column_name);
    
          ztable.setModel(model);
    

    【讨论】:

    • 基本上您的解决方案是使用行和列向量创建一个新的 DefaultTableMode。值得一试,尽管您的代码(格式)还有一些不足之处,欢迎使用 StackOverflow。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-21
    相关资源
    最近更新 更多