2017-05-24 1 views
-1

ResultSetをすべて追加しています。私は正常にすべての行を取得します。しかし、すべての行をListに追加すると、最初の行だけが取得され、ループはすでに追加される別の行をスキップします。理由は何ですか?リストはすでに与えられていても他のResultSetを追加しません

public void getStartEndTimeForOvertime(EmployeeModel employeeModel) 
{ 
    String query = "{call getStartEndTimeForOvertime(?,?)}"; 
    List <EmployeeModel> list = new ArrayList(); 

    try(Connection con = DBUtil.getConnection(DBType.MYSQL); 
     CallableStatement cs = con.prepareCall(query);) 
    { 
     cs.setInt(1, EmployeeModel.getId()); 
     cs.setString(2, employeeModel.overtimeModel.getDay()); 

     try(ResultSet rs = cs.executeQuery()) 
     { 
      while(rs.next()) 
      { 
       employeeModel.overtimeModel.setStartTime(rs.getString(1)); 
       employeeModel.overtimeModel.setEndTime(rs.getString(2)); 

       list.add(employeeModel); 
      } 
     } 

    } 
    catch(SQLException ex) 
    { 
     System.out.println("Error at getStartEndTimeForOvertime: "+ex.getSQLState()); 
     System.out.println("Error at getStartEndTimeForOvertime: "+ex.getMessage()); 
     System.out.println("Error at getStartEndTimeForOvertime: "+ex.getErrorCode()); 
    } 
} 

答えて

3

たresultSetを反復しながら、あなたはEmployeeModel の同じオブジェクトにそれを設定しているたびは、代わりにこの

while(rs.next()){ 
    EmployeeModel employeeModel = new EmployeeModel(); 
    employeeModel.overtimeModel.setStartTime(rs.getString(1)); 
    employeeModel.overtimeModel.setEndTime(rs.getString(2)); 

    list.add(employeeModel); 
} 
+1

を行うあなたは 'immutable'データ値オブジェクトを使用することを学ばなければならない理由です。これらの愚かな間違いは決して起こりません。 –

+0

これはまだ別のオブジェクトを作成しても最初の行しか取得できません。 –

関連する問題