簡體   English   中英

ResultSet僅將最后一行返回JTable

[英]ResultSet returns only last row into JTable

我已經做了足夠的搜索來解決我已經部分完成的問題,但是這個錯誤一直困擾着我。我試圖根據條件從數據庫中獲取數據。我有一個帶有外鍵列的表'user_branch' branchID應該在另一個表'branches'中獲取核心對應的branchNames,並且我應該將結果顯示到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事件,我用它來獲取userID,以用作獲取分配給他的特定用戶分支的條件。 分配給用戶的分支是動態的,因此使用StringBuilder。 我應該將結果顯示到另一個名為branchJTable的JTable中,該JTable僅顯示最后一行。任何幫助將不勝感激!

根據您的問題,我認為您應該聲明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中獲得最后插入的行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM