如何将数据库中的所有记录显示到 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()),您知道如果条件检查是truefalse

rs.next()

将游标从数据库中移到结果集的下一行,如果有行则返回真,否则返回假。结合 if 语句(而不是 while),这意味着您只期望一行。很简单,

rs.next()

检查下一行是否存在 if 条件通过并执行代码块并从块中退出运行其余代码。

关于遍历数据库表并将所有内容添加到jTable的具体问题。 您只需更改一个关键字

ifwhile

当您使用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 数据库中的记录

如何更改Jtable中的数据并且更新到数据库中?

只有最后一个值是从 jTable 中的数据库打印

在 JAVA swing 中将数据库记录显示到 JTable

在jTable(自动保存)中编辑后,如何将单元格中的数据保存在sql中?

如何将选择列添加到显示搜索结果的 JTable