对不起。我想在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);
}
我不知道如何编码。谢谢
答案 0 :(得分:5)
更改
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});
}
答案 1 :(得分:1)
试试这个
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);
答案 2 :(得分:0)
您已使用if(rs.next())
您知道如果检查条件是true
还是false
。
rs.next()
将光标移动到数据库中结果集的下一行,如果有任何行则返回true,否则返回false。结合if语句(而不是while),这意味着您只期望在一行中。简单地说,
rs.next()
检查下一行是否存在if
条件并执行代码块并从块中运出其余代码。
关于迭代数据库表并将所有内容添加到jTable的具体问题。 您只需更改一个关键字,
if
至while
当您使用while
关键字代替if
关键字时会发生什么?rs.next()
检查下一行,如果是真,那么while
循环的条件为true并通过代码块和当块再次完成时检查下一行。同样,遍历表中的所有行,条件将在最后一行之后失败。