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的主要内容,如果未能解决你的问题,请参考以下文章