【问题标题】:More than one jTable with the same ResultSet in JavaJava中具有相同ResultSet的多个jTable
【发布时间】: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()));

标签: java mysql swing resultset apache-commons-dbutils


【解决方案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(...) 方法

    【讨论】:

      猜你喜欢
      • 2015-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-07
      • 2018-02-16
      • 1970-01-01
      相关资源
      最近更新 更多