ResultSet 仅将最后一行返回到 JTable

Posted

技术标签:

【中文标题】ResultSet 仅将最后一行返回到 JTable【英文标题】:ResultSet returns only last row into JTable 【发布时间】:2013-03-10 15:54:50 【问题描述】:

我已经完成了足够多的搜索来解决我已经部分完成的问题,但是有一个错误一直困扰着我。我正在尝试根据条件从数据库中获取数据。我有一个表 'user_branch' 与外键列 branchID 应该在另一个表“分支”中获取对应的分支名称,我应该将结果显示到 JTable 中。当我执行 System.out.println 时,我得到了所有结果,但它只返回最后一行当我在 JTable(branchJTable) 中显示时。这是我正在使用的代码

 int row = user2BAssignedJTable.getSelectedRow();
    assignUserID.setText(user2BAssignedJTable.getModel().getValueAt(row, 0).toString());
    user2BAssignedField.setText(user2BAssignedJTable.getModel().getValueAt(row, 1).toString());

    try 

        String userBrQry = "SELECT branchID FROM user_branch WHERE userID IN(?) ";
        String brQ = "SELECT branchName FROM branches WHERE branchID IN(%s) ";

        pstmt = con.prepareStatement(userBrQry);
        pstmt.setString(1, assignUserID.getText());
        results = pstmt.executeQuery();

        results.last();
        int nRows = results.getRow();
        results.beforeFirst();

        while (results.next()) 
            String branchIDS = results.getString("branchID");

            StringBuilder builder = new StringBuilder();
            for (int i = 0; i < nRows; i++) 
                builder.append("?");
                if (i + 1 < nRows) 
                    builder.append(",");
                
            
            brQ = String.format(brQ, builder.toString());
            PreparedStatement ps = con.prepareStatement(brQ);
            for (int i = 0; i < nRows; i++) 
                ps.setString(i + 1, branchIDS);
            
            ResultSet rs = ps.executeQuery();
            //branchJTable.setModel(DbUtils.resultSetToTableModel(rs));                

            javax.swing.table.DefaultTableModel model = new javax.swing.table.DefaultTableModel();
            model.setColumnIdentifiers(new String[]"Branch Name");
            branchJTable.setModel(model);

            while (rs.next()) 
                String branchname = rs.getString("branchName");
                model.addRow(new Object[]branchname);                  

            

        

     catch (Exception e) 
        JOptionPane.showMessageDialog(null, e);
     

忘记前 3 行,因为它是另一个 JTable 事件,我使用它来获取用户 ID,以用作获取分配给他的特定用户分支的条件。 分配给用户的分支是动态的,因此使用 StringBuilder。 我应该将结果显示到另一个名为 branchJTable 的 JTable 中,它只显示最后一行。任何帮助将不胜感激!

【问题讨论】:

请发帖sscce。 如需尽快获得更好的帮助,请发帖SSCCE。 【参考方案1】:

根据您的问题,我认为您应该声明 JTable

javax.swing.table.DefaultTableModel model = new javax.swing.table.DefaultTableModel();
model.setColumnIdentifiers(new String[]"Branch Name");
branchJTable.setModel(model);

在你的第一个循环之前 -

即在您的代码中 while (results.next()) 之前。

否则在循环中,对于每个循环执行,

JTable 模型正在初始化,您将获得 Jtable 中最后插入的行。

【讨论】:

以上是关于ResultSet 仅将最后一行返回到 JTable的主要内容,如果未能解决你的问题,请参考以下文章

ResultSet next() 只返回一行

如何仅从 ResultSet 中获取第一行

代码仅将文本文件的一行保存到数组中

通过ResultSet获取到rs的记录数的几种方法

Python For循环仅将最后一个值附加到列表

iterator接口的hasnext方法、next方法和ResultSet结果集的next方法的区别