结果集到包含另一个 POJO 的数组列表的 POJO



希望有人能给我打电话。我有一个具有以下结构的 POJO:

public class Invoice{
private String docNum;
private String customer;
private ArrayList<InvoiceDetails> invoiceDetails;
/* Getters and setters*/
}

还有另一个具有以下内容的POJO

public class InvoiceDetails{
private String taxRate;
private Double taxAmount;
private Double amount;
/* Getters and setters*/
}

我想知道的是从这样的结果集中填充 Pojo Invoice的最佳方法:

String sql= "SELECT  InvoiceNumber, Customer, TaxRate, TaxAmount,Amount FROM TAX_VIEW WHERE Date=?"
PreparedStatement pst = cn.prepareStatement(Config.SQL_FACTURAS, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
     pst.setDate(1, date);
     ResultSet rs = pst.executeQuery();

假设ResultSet可以返回同一张发票的多条记录,是否可以一劳永逸地做到这一点,而无需第二次迭代?多谢

在您看来,我想已经有一个连接。我想Invoice.docNum与SELECT中的InvoiceNumber相同。(为什么有不同的名字?因此,您应该将"ORDER BY InvoiceNumber"添加到您的选择中,并在处理循环中验证它的更改。代码是伪代码,未经测试:

ResultSet rs = pst.executeQuery();
Invoice invoice=new Invoice();
while(rs.next()){
    if (invoice.getDocNum().compareTo(rs.getString(1))!=0) {
         // This is a new Invoice, so process previous if not the first one
         // and create a new instance
         invoice=new Invoice();
         invoice.setDocNum(rs.getString(1));
         invoice.setCustomer(rs.getString(2));
         invoice.setInvoiceDetails(new ArrayList<InvoiceDetails>());
    }
    InvoiceDetails invoiceDetails = new InvoiceDetails();
    invoiceDetails.setTaxRate(rs.getString(3));
    // ... further member settings, and finally add to list:
    invoice.getInvoiceDetails.add(invoiceDetails);
}
// finally process the last Invoice if it is not empty

最新更新