2017-10-19 15 views
0

次の3つの結果セットとリストがあります。 while(rs1.next())を3回使用せずに3つの結果セットを反復し、リストにデータを返すことができます。複数の結果セットから単一の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

結果セットにオブジェクトが1つしかない場合は、ループを使用する必要はありません。単純if文を使用します。 –

+0

@NishadKAhamed私の3つの結果セットは3つのテーブルを返します。だから私はデータを取得するために3つのwhileループを使用する必要がありますか? – Aby

答えて

1

目標は、あなたがResultSetをループメソッドを作成することができ、すべてのResultSet S(3つのループ)のために同じコードを書くことを避けるためにある場合は、行ごとに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)、しかし2つの改善点: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のすべてのためにこれを行うにあなたがすることはできません

関連する問題