【问题标题】:How to display table name in database to JTable?如何将数据库中的表名显示到 JTable?
【发布时间】:2018-09-01 15:18:17
【问题描述】:

我想获取数据库中的所有表名并将其显示在JTable。

正在打印:

con =  DriverManager.getConnection("jdbc:h2:C:/SimpleGST/GST/INVOICES","sa","");
String[] types = {"TABLE"};
DatabaseMetaData metadata = con.getMetaData();
ResultSet resultSet = metadata.getTables(null, null, "%", types);
while (resultSet.next()) {
    String tableName = resultSet.getString(3);
    System.out.println(tableName);
    table.setModel(net.proteanit.sql.DbUtils.resultSetToTableModel(resultSet));
}

它正在打印表格名称,但它没有显示在表格中。

【问题讨论】:

  • 1) 为了尽快获得更好的帮助,请发帖 minimal reproducible example 或 Short, Self Contained, Correct Example。 2) 使用逻辑一致的缩进代码行和块的形式。缩进是为了让代码流更容易理解! 3) 源代码中的一个空白行是永远需要的。 { 之后或} 之前的空行通常也是多余的。

标签: java database swing jtable resultset


【解决方案1】:
while (resultSet.next()) 
{
    String tableName = resultSet.getString(3);
    System.out.println(tableName);
    table.setModel(net.proteanit.sql.DbUtils.resultSetToTableModel(resultSet));
}

您有一个 while 循环,它不断用您读取的每一行数据替换模型。因此,在您上次尝试设置模型时,已读取 ResultSet 中的所有数据。

使用resultSetToTableModel(...) 方法的意义在于,它将为您从ResultSet 中读取所有数据并创建TableModel。所以不需要while循环。

需要将上面的代码替换成一行代码:

table.setModel(net.proteanit.sql.DbUtils.resultSetToTableModel(resultSet));

编辑:

但它显示了太多其他列..我只想显示表格

然后你需要手动创建表模型。代码类似于:

Vector columnNames = new Vector();
columnNames.addElement("Table");

DefaultTableModel model = new DefaultTableModel(columnNames, 0);

while (resultSet.next()) 
{
    Vector row = new Vector();
    row.addElement( resultSet.getString(3) );
    model.addRow(row);
}

table = new JTable( model );
scrollPane.setViewportView( table );

【讨论】:

  • 那么问题出在代码的另一部分。也许您没有将表格添加到滚动窗格并将滚动窗格添加到框架。您是否添加了任何调试代码来显示 JTable 的行数和列数,以确保模型创建正确?
  • 我只是将滚动窗格设置为 setViewportView,现在它正在循环中工作。
  • 但它显示了太多其他列..我只想显示表格
  • 我正在创建一个计费软件..所以需要保存账单..所以我正在为每个账单创建表并将数据保存到其中.....如果你有更好的主意。 . 那么欢迎
  • 我再重复一遍——你有没有调试过???您是否在将数据添加到模型时显示了数据?您是否显示了表格的行数/列数?你看到列标题了吗?您至少应该看到列标题,因为您对这些值进行了硬编码。如果你不这样做,那么你没有将滚动窗格添加到框架中,或者在将滚动窗格添加到框架之后,你没有 revalidate() 和 repaint() 框架。
【解决方案2】:
Vector columnNames = new Vector();
    columnNames.addElement("Table");

    DefaultTableModel model = new DefaultTableModel(columnNames, 0);
    try{con = DriverManager.getConnection("your url");
        String[] types = {"TABLE"};
        DatabaseMetaData metadata = con.getMetaData();
        ResultSet resultSet = metadata.getTables(null, null, "%", types);


            while (resultSet.next()) 
            {

                Vector row = new Vector();
                row.addElement( resultSet.getString(3) );
                model.addRow(row);
            }

            table = new JTable(model  );
            scrollPane = new JScrollPane( table );
            scrollPane.setBounds(10, 11, 724, 639);
            contentPane.add( scrollPane );
            scrollPane.setViewportView(table);

感谢@camickr 提供代码。没有你的帮助,我不会解决这个问题。 谢谢大佬

【讨论】:

  • 如果你同意这个..你可以批准这个答案
  • 您可以通过接受他的回答来承认 camickr 的帮助。您可以通过检查他的答案旁边的复选标记来做到这一点。
  • 我可以但是 model.add();是未定义的。当他将其更改为 model.addRow();我必须批准他的回答
  • 那行现在在他的回答中改变了;-)
猜你喜欢
  • 2011-12-31
  • 2015-07-20
  • 2011-09-16
  • 2014-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-19
  • 1970-01-01
相关资源
最近更新 更多