2013-03-10 79 views
-1

我已經完成了足夠的搜索來解決我部分完成的問題,但是這個問題一直讓我感到不安。我試圖從數據庫中獲取數據,基於條件。我有一個帶有外鍵列branchID的表「user_branch」,它應該在另一個表'branches'中獲取相應的branchNames,我應該將結果顯示到一個JTable中。當我做System.out.println時,我得到了所有的結果但它返回只有當我在一個JTable(branchJTable)顯示最後一排。這是我使用ResultSet只返回最後一行到JTable中

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事件中,我用它來獲取用戶標識代碼用作ge的條件分配給他的特定用戶的分支。 分配給用戶的分支是動態的,因此使用StringBuilder。 我應該顯示結果到另一個JTable叫branchJTable只顯示最後一行。任何幫助將不勝感激!

+0

請發佈[sscce](http://sscce.org)。 – djechlin 2013-03-10 15:56:50

+0

爲了儘快提供更好的幫助,請發佈[SSCCE](http://sscce.org/)。 – 2013-03-10 15:57:02

回答

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中。

+0

謝謝soooooo很多...它只是工作。你是一個救生員 – nastycrow 2013-03-10 16:10:39

+0

謝謝...至少這解決了你的問題。 – 2013-03-10 16:12:14