2017-04-22 116 views
2

我一直在致力於一個返回arraylist的web服務。我如何將返回的數組列表添加到jtable並顯示?如何添加ArrayList到jtable?

ArrayList customerDetails = new ArrayList(); 
    try { 
     String sqlQuery = "SELECT * FROM customer WHERE AccountNumber="+accountNumber; 
     PreparedStatement stmt = DatabaseConnection.dBconn().prepareStatement(sqlQuery); 
     ResultSet rs = stmt.executeQuery(); 

     while (rs.next()) { 

      customerDetails.add(rs.getString("Name")); 
      customerDetails.add(rs.getString("DoB")); 
      customerDetails.add(rs.getString("Address")); 
      customerDetails.add(rs.getString("Mobile")); 
      customerDetails.add(rs.getString("Email")); 
      customerDetails.add(rs.getString("AccountType")); 
      customerDetails.add(rs.getString("AccountNumber")); 
      customerDetails.add(rs.getString("SortCode")); 
      customerDetails.add(rs.getString("Balance")); 
      customerDetails.add(rs.getString("Card")); 

     } 
     return customerDetails; 

    } catch (SQLException err) { 
     System.out.println(err.getMessage()); 
    } 
    return customerDetails; 
+0

讓我們開始的事實,你的'ArrayList'不規整爲行/列編組,您將需要一個'List'在List中,外部列表是行,內部列表是列值 – MadProgrammer

+0

你的問題是添加ArrayList到JTable,所以試試[這個解決方案](http://stackoverflow.com/questions/26973577/create -jtable-WI th-arraylist) –

+0

'我一直在致力於一個返回arraylist的web服務。「 - 爲什麼它會返回一個ArrayList?如果您從數據庫中獲取所有數據,爲什麼不只是返回一個包含所有數據的'DefaultTableModel'。然後,您只需使用表模型創建您的'JTable'。 – camickr

回答

1

讓我們開始的事實,你ArrayList不規整爲行/列編組,您將需要一個List,其中外部列表​​行和內部列表內的List是列值

雖然我們在這,我們也利用PreparedStatement正確的和管理資源,使他們正確關閉,而我們在這

ArrayList<List<String>> customerDetails = new ArrayList<>(25); 
String sqlQuery = "SELECT * FROM customer WHERE AccountNumber=?"; 
try (PreparedStatement stmt = DatabaseConnection.dBconn().prepareStatement(sqlQuery)) { 
    stmt.setString(1, accountNumber); 
    try (ResultSet rs = stmt.executeQuery()) { 

     while (rs.next()) { 
      List<String> rowDetails = new ArrayList<>(10); 
      rowDetails.add(rs.getString("Name")); 
      rowDetails.add(rs.getString("DoB")); 
      rowDetails.add(rs.getString("Address")); 
      rowDetails.add(rs.getString("Mobile")); 
      rowDetails.add(rs.getString("Email")); 
      rowDetails.add(rs.getString("AccountType")); 
      rowDetails.add(rs.getString("AccountNumber")); 
      rowDetails.add(rs.getString("SortCode")); 
      rowDetails.add(rs.getString("Balance")); 
      rowDetails.add(rs.getString("Card")); 

      customerDetails.add(rowDetails); 
     } 
    } 

} catch (SQLException err) { 
    System.out.println(err.getMessage()); 
} 
return customerDetails; 

看一看Using Prepared StatementsThe try-with-resources Statement更多細節

現在,我們需要一個TableModel可以支持它,在最基層...

public class ListTableModel extends AbstractTableModel { 

    private List<List<String>> rows; 
    private List<String> columnNames; 

    public ListTableModel(List<String> columnNames, List<List<String>> rows) { 
     this.rows = new ArrayList<>(rows); 
     this.columnNames = columnNames; 
    } 

    @Override 
    public int getRowCount() { 
     return rows.size(); 
    } 

    @Override 
    public int getColumnCount() { 
     return columnNames.size(); 
    } 

    @Override 
    public String getColumnName(int column) { 
     return columnNames.get(column); 
    } 

    @Override 
    public Class<?> getColumnClass(int columnIndex) { 
     Class type = String.class; 
     return type; 
    } 

    @Override 
    public Object getValueAt(int rowIndex, int columnIndex) { 
     List<String> rowData = rows.get(rowIndex); 
     return rowData.get(columnIndex); 
    } 
} 

這需要對列名的行數據的ListList<List> 。個人而言,我更喜歡將數據封裝到某種普通舊Java對象(PO​​JO)中,因爲它封裝了數據並在顯示時提供了更大的靈活性(即,我需要顯示對象的所有屬性如果我不希望)

看看How to Use Tables更多細節