2017-05-22 27 views
0

希望有人能夠幫我。我有以下結構的POJO:ResultSet到包含另一個POJO的陣列列表的POJO

public class Invoice{ 

private String docNum; 
private String customer; 
private ArrayList<InvoiceDetails> invoiceDetails; 

/* Getters and setters*/ 
} 

並用以下

public class InvoiceDetails{ 

private String taxRate; 
private Double taxAmount; 
private Double amount; 

/* Getters and setters*/ 
} 

另一個POJO我想知道的是,從這樣的一個結果填補了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(); 

Asuming的ResultSet可以爲同一張發票返回多個記錄,它是更多鈔票做一勞永逸,而無需秒迭代? 非常感謝

+0

什麼是您的表格結構?在我頭頂,你應該在這裏做一個加入。 –

+0

它是SQL Server中的視圖的源代碼。原來的表格確實加入了。 – pburgov

回答

1

在你的看法我猜測已經有一個聯接。我想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 
+0

完美!!這正是我所期待的。它像一個魅力。非常感謝你!! – pburgov

+0

不客氣。 :-) – Galcoholic