希望有人能给我打电话。我有一个具有以下结构的 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