2017-04-22 109 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更多细节