-1

私は部分的に行った問題を解決するために十分な検索を行いましたが、私を悩ませ続けるこの1つのバグがあります.条件に基づいてデータベースからデータを取得しようとしています.外部キー列を持つテーブル「user_branch」があります別のテーブル「ブランチ」で対応するbranchNamesをフェッチすることになっている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 行については忘れてください。これは、userID を取得して、特定のユーザーのブランチをユーザーに割り当てるための条件として使用する別の JTable イベントであるためです。ユーザーに割り当てられたブランチは動的であるため、StringBuilder を使用します。最後の行のみを表示する branchJTable という別の JTable に結果を表示することになっています。

4

1 に答える 1

4

あなたの質問から、 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 に最後に挿入された行を取得しています。

于 2013-03-10T16:03:10.190 に答える