如何将数据库中的所有记录显示到 JTable?
Posted
技术标签:
【中文标题】如何将数据库中的所有记录显示到 JTable?【英文标题】:How to show all records in database to JTable? 【发布时间】:2015-07-20 23:59:32 【问题描述】:对不起。我想在 JTable 中显示所有记录。但我很困惑,因为我的编码只显示 1 条记录。当我再次单击它时,它只会显示相同的记录。 您能帮我如何获取所有记录吗?
try
Statement stmt;
stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM menu");
if (rs.next())
String menu_id = rs.getString("menu_id");
String menu_type = rs.getString("menu_type");
String menu_cat = rs.getString("menu_cat");
String menu_name = rs.getString("menu_name");
String menu_price = rs.getString("menu_price");
DefaultTableModel model = (DefaultTableModel) tblMenu.getModel();
model.addRow(new Object[]menu_id, menu_type, menu_cat, menu_name, menu_price);
catch (Exception e)
System.out.println("Failed " + e);
我不知道如何编码。谢谢
【问题讨论】:
"但是我很困惑,因为我的编码只显示了 1 条记录" 你为什么认为你的代码应该将所有记录放在表中?您认为代码的哪一部分应该确保这一点? 因为我要显示菜单,所以必须全部显示。因此,收银员将变得更容易做到这一点。 @Pshemo 【参考方案1】:您使用过if(rs.next())
,您知道如果条件检查是true
或false
。
rs.next()
将游标从数据库中移到结果集的下一行,如果有行则返回真,否则返回假。结合 if 语句(而不是 while),这意味着您只期望一行。很简单,
rs.next()
检查下一行是否存在 if
条件通过并执行代码块并从块中退出运行其余代码。
关于遍历数据库表并将所有内容添加到jTable的具体问题。 您只需更改一个关键字,
if
到 while
当您使用while
关键字而不是if
关键字时会发生什么情况是rs.next()
检查下一行,如果为真,则while
的条件为真循环并遍历代码块,当块完成时再次检查下一行。同样遍历表中的所有行,最后一行之后条件将失败。
【讨论】:
【参考方案2】:试试这个
String[] cols="id","type","cat","name","price";
ArrayList<String[]> list = new ArrayList<String[]>();
while (rs.next())
String menu_id = rs.getString("menu_id");
String menu_type = rs.getString("menu_type");
String menu_cat = rs.getString("menu_cat");
String menu_name = rs.getString("menu_name");
String menu_price = rs.getString("menu_price");
list.add(new String[]menu_id, menu_type, menu_cat, menu_name, menu_price);
String[][] elts= new String[list.size()][];
elts = list.toArray(elts);
JTable table = new JTable(elts,cols);
JScrollPane pane = new JScrollPane(table, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
frame.getContentPane().add(pane);
【讨论】:
我必须对数据库做同样的事情,这就是我所做的。主要优点是可以在表格顶部看到列名【参考方案3】:改变
if (rs.next())
到
while (rs.next())
不仅要运行到代码块一次,还要运行到ResultSet
的末尾。
实际上应该是这样的
DefaultTableModel model = (DefaultTableModel) tblMenu.getModel();
while (rs.next())
String menu_id = rs.getString("menu_id");
String menu_type = rs.getString("menu_type");
String menu_cat = rs.getString("menu_cat");
String menu_name = rs.getString("menu_name");
String menu_price = rs.getString("menu_price");
model.addRow(new Object[]menu_id, menu_type, menu_cat, menu_name, menu_price);
【讨论】:
并且不要使用while
循环创建新的DefaultTableModel
如果我删除它,代码会要求我创建字段/类“模型”@MadProgrammer
@enjeru 是的,但您不需要在循环的每次迭代中创建一个新的DefaultTableModel
,如果您只是简单地将if
替换为`while`,就会发生这种情况。答案的更新说明了正确的想法
啊。我知道了。对不起,我忘了我是否把它放在循环语句中-_- @MadProgrammer以上是关于如何将数据库中的所有记录显示到 JTable?的主要内容,如果未能解决你的问题,请参考以下文章
在 Java 中使用 JTable 显示 MySQL 数据库中的记录
在 JAVA swing 中将数据库记录显示到 JTable