Java中具有相同ResultSet的多个jTable

Posted

技术标签:

【中文标题】Java中具有相同ResultSet的多个jTable【英文标题】:More than one jTable with the same ResultSet in Java 【发布时间】:2014-05-03 16:00:40 【问题描述】:

您能否使用相同的resultSet 填充多个jTable

public void tableDisplay() 

    String tableQuery = "SELECT foodQuantity,foodName FROM food ORDER BY RAND() LIMIT 3";
    ResultSet rs;
    PreparedStatement statement;
    try 

        statement = con.prepareStatement(tableQuery);
        rs = statement.executeQuery();
        jTable1.setModel(DbUtils.resultSetToTableModel(rs));
        jTable2.setModel(DbUtils.resultSetToTableModel(rs));

     catch (SQLException ex) 
        System.out.println(ex.toString());
    

代码编译,但第二个表没有从数据库中获取任何记录。 关键是我需要从 mysql 表中选择随机项,我想在几个jTables 中显示它们。

【问题讨论】:

让我们看看 DbUtils.resultSetToTableModel - 如果每次调用它时都在 RS 上进行迭代,那么你就输了(除非你每次都强制它回到 ResultSet 的开头) TableModel model = DbUtils.resultSetToTableModel(rs); ;jTable1.setModel(model); jTable2.setModel(model); 或者,只需将一行更改为:jTable2.setModel(jTable1.getModel()); 设置 TableModel 并将其作为参数传递给每个 jTable2.setModel(model) 方法调用的解决方案有效,并且它使用数据填充每个 jTable。非常感谢你。但是我的结果集总是相同的,而不是产生随机值。这是我的 sql 语句“SELECT foodQuantity,foodName FROM food ORDER BY RAND() LIMIT 3”;我正在尝试使用“ORDER BY RAND() 函数,但似乎一旦生成结果集它就会被保存并重新使用任何想法? 如果您希望表中有不同的内容,那么您需要执行两次查询并分别填充每个模型。 jTable1.setModel(DbUtils.resultSetToTableModel(statement.executeQuery())); jTable2.setModel(DbUtils.resultSetToTableModel(statement.executeQuery())); 【参考方案1】:

如何使用 resultSet 填充 JTable

try
playerTableModel = (DefaultTableModel)playerTable.getModel();
            rs = controller.getPlayer();
            while (playerTableModel.getRowCount() > 0);
            int columns = playerTableModel.getColumnCount();
            Object[] rows = new Object[columns];
            while(rs.next())

                    rows[0] = rs.getString(1);
                    rows[1] = rs.getString(2);
                    rows[2] = rs.getString(3);
                    rows[3] = rs.getString(4);

                    playerTableModel.addRow(rows);
catch(Exception e)
                e.printStackTrace();
        

你不能也为第二个表调用相同的方法吗?

【讨论】:

【参考方案2】:

在不太了解您的代码的情况下,我会说您需要调用一次DbUtils.resultSetToTableModel(rs),并将生成的表模型存储在一个局部变量中。然后,将该局部变量传递给两个 setModel(...) 方法

【讨论】:

以上是关于Java中具有相同ResultSet的多个jTable的主要内容,如果未能解决你的问题,请参考以下文章

即使我的 RESULTSET 不是空的,我也没有得到输出。使用 JAVA 和 ORACLE 数据库

JDBC ResultSet 获取具有表别名的列

让java从Mysql返回多个ResultSet

Java 中的resultset详解

Java 中的resultset详解

使用 SimpleXML 和 Java 具有相同名称的多个元素