2017-10-19 29 views
0

我有以下三個結果集和一個列表。我如何迭代三個結果集而不使用三個while(rs1.next())並將數據返回給列表。從多個結果集檢索數據到一個單一的java列表

public Optional<List<StudentDetails>> getStudDetails(String id) 
    { 
     List<StudentDetails> stud= new ArrayList<StudentDetails>(); 
     ResultSet rs1 = (ResultSet) storedProcedureCall.getObject(4); 
     ResultSet rs2 = (ResultSet) storedProcedureCall.getObject(5); 
     ResultSet rs3 = (ResultSet) storedProcedureCall.getObject(6); 

    } 
+1

你不能。如果沒有迭代,沒有辦法從結果集中獲取信息。 –

+0

如果結果集中只有一個對象,則不需要使用循環。使用簡單的if語句。 –

+0

@NishadKAhamed我的三個結果集返回三個表。那麼我需要使用三個while循環來獲取數據嗎? – Aby

回答

1

如果目標是爲了避免編寫相同的代碼對所有ResultSet S(3圈),你可以創建一個通過ResultSet循環的方法,生成的每一行StudentDetails對象,並把它們加到列表。

下面是一個例子:

public Optional<List<StudentDetails>> getStudDetails(String id){ 
    List<StudentDetails> stud= new ArrayList<StudentDetails>(); 
    ResultSet rs1 = (ResultSet) storedProcedureCall.getObject(4); 
    ResultSet rs2 = (ResultSet) storedProcedureCall.getObject(5); 
    ResultSet rs3 = (ResultSet) storedProcedureCall.getObject(6); 
    addStudentDetails(stud, rs1); 
    addStudentDetails(stud, rs2); 
    addStudentDetails(stud, rs3); 
} 

private static void addStudentDetails(List<StudentDetails> list, ResultSet rs){ 
    while(rs.next()){ 
     list.add(new StudentDetails(rs.get.....)); 
    } 
} 
+1

好的答案(+1),但有兩個改進:1)使'getStudentDetails'' private'和'static',2)將'List stud'傳遞給'getStudentDetails'方法,因此它可以直接添加對象到該列表,而不必創建臨時列表。然後代碼變成'addStudentDetails(stud,(ResultSet)storedProcedureCall.getObject(4));' – Andreas

+0

@Andreas好的建議。我編輯了我的答案。 – Titus

+0

你甚至可以擺脫'rs1','rs2'和'rs3'局部變量,並且直接在調用addStudentDetails()的時候調用getObject()調用,就像在我以前的評論。 – Andreas

0

如果結果只包含一個對象,那麼你不需要去循環。請使用簡單的if語句來檢查數據是否可用。

喜歡的東西:

if(resultSet.hasNext()){ 
    Object obj= objresultSet.next(); 
} 

做到這一點對所有的ResultSet對象

相關問題