2017-05-22 3 views
0

hoffe jemand kann mich hgelp. Ich habe eine POJO mit folgenden Struktur:ResultSet zu einem POJO, der enthält und eine Arraylist eines anderen POJO

public class Invoice{ 

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

/* Getters and setters*/ 
} 

Und ein weiteres POJO mit folgenden

public class InvoiceDetails{ 

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

/* Getters and setters*/ 
} 

Was würde ich gerne weiß, ist der beste Weg, um die Pojo Invoice von einem resultset wie folgt zu füllen:

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(); 

die ResultSet asuming können mehrere Datensätze für die gleiche Rechnung, ist es posible es ein für alle Mal zu tun, ohne die Notwendigkeit einer Sekunde und Iteration? Vielen Dank

+0

Was ist Ihre Tabellenstruktur? Von Kopf bis Fuß sollten Sie hier mitmachen. –

+0

Die Quelle ist eine Sicht in SQL Server. Die ursprünglichen Tabellen sind tatsächlich verbunden. – pburgov

Antwort

1

Aus Ihrer Sicht denke ich, es gibt bereits eine beitreten. Ich nehme an, Invoice.docNum ist dasselbe wie InvoiceNumber in SELECT. (Warum gibt es unterschiedliche Namen?) Sie sollten also eine "ORDER BY InvoiceNumber" zu Ihrer Auswahl hinzufügen und in der Verarbeitungsschleife die Änderung überprüfen. Code ist Pseudo, nicht getestet:

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

Perfekt !!. Genau das habe ich gesucht. Es wirkt wie ein Zauber. Vielen Dank!! – pburgov

+0

Gern geschehen. :-) – Galcoholic