如何将数据库中的所有记录显示给JTable?

时间:2015-05-10 12:31:05

标签: java mysql swing jtable

对不起。我想在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);
        }

我不知道如何编码。谢谢

3 个答案:

答案 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的具体问题。 您只需更改一个关键字

ifwhile

当您使用while关键字代替if关键字时会发生什么?rs.next()检查下一行,如果是真,那么while循环的条件为true并通过代码块和当块再次完成时检查下一行。同样,遍历表中的所有行,条件将在最后一行之后失败。