2013-10-14 3 views
4

의 목록이 들어 나는이 저장 프로 시저 자바에서 호출이 있습니다결과 집합은 LinkedCaseInsensitiveMap <V>

@Autowired 
public ScoreDao(DataSource dataSource) { 
    setDataSource(dataSource); 
    mScoreStoredProcedure = new ScoreStoredProcedure(dataSource); 
} 

public List<Score> loadAllScore(String pUsername, String pUUID, int pLimit) { 
    return mScoreStoredProcedure.execute(pUsername, pUUID, pLimit); 
} 

private class ScoreStoredProcedure extends StoredProcedure { 
    private static final String SPROC_NAME = "loadUserScore"; 

    public ScoreStoredProcedure(DataSource datasource) { 
     super(datasource, SPROC_NAME); 
     declareParameter(new SqlReturnResultSet("#result-set-2", mScoreMapper)); 
     declareParameter(new SqlParameter("vusername", Types.VARCHAR)); 
     declareParameter(new SqlParameter("vuuid", Types.VARCHAR)); 
     declareParameter(new SqlParameter("vlimit", Types.INTEGER)); 
     compile(); 
    } 

    @SuppressWarnings("unchecked") 
    public List<Score> execute(String pUsername, String pUUID, int pLimit){ 
     Map<String,Object> lAllScoreResult = super.execute(pUsername, pUUID, pLimit); 
     List<Score> lAllScore = ((List<Score>)lAllScoreResult.get("#result-set-2")); 
     return lAllScore; 
    } 

} 

이 매퍼 클래스 :

public class ScoreMapper implements RowMapper<Score> { 

private String suffix = ""; 

@Autowired 
private ScoreCreator scoreCreator; 

@Autowired 
private QuestionMapper questionMapper; 

public ScoreMapper(String pSuffix) { 
    suffix = pSuffix; 
} 

public Score mapRow(ResultSet rs, int rowNum) throws SQLException { 
    Score lScore = scoreCreator.createScore(rs.getLong(suffix+"id"), 
      rs.getTimestamp(suffix+"stempel"), rs.getString(suffix+"username"), 
      rs.getInt(suffix+"points"), rs.getInt(suffix+"level"), 
      rs.getString(suffix+"comment"), 
      questionMapper.mapRow(rs, rowNum), rs.getString(suffix+"uuid")); 
    return lScore; 
} 
    } 

내가 가진 문제의 결과이다 내 StoredProcedure은 결코 List<Score>으로 전송되지 않습니다.

대신 LinkedCaseInsensitiveMap<V>의 목록을 포함합니다. 각 항목은 데이터베이스의 값을 포함합니다.

매퍼는 스프링을 통해 올바르게 배선됩니다.

간단히 : 결과는 List<Score> 일 것으로 예상됩니다. 코드에 표시된 메서드를 사용하여이 문제를 해결할 수 있다고 생각했습니다. 결과를 내 List<Score>에 직접 전송하려면 어떻게해야하나요?

나는 당신이 날 문제를 찾을 수 없습니다 튜토리얼

http://www.jtmelton.com/2007/10/30/using-springs-storedprocedure-and-rowmapper-mechanisms/을 따라?

+0

mapRow를 절대로 호출하지 않는 것처럼 보입니다.지도를 목록으로 전송 중입니다. – aglassman

+0

네, 궁금해하고 싶습니다.하지만이 튜토리얼을 따라갔습니다. http://www.jtmelton.com/2007/10/30/using-springs-stringsprocedure-and-rowmapper-mechanisms/ –

+0

아 좋아요. MapRow를 호출하는 것에 대해 말한 것을 잘 살펴보면 스프링 API에서만 사용해야합니다. – aglassman

답변

3

는 "ScoreResultSet"말에 결과 집합 매개 변수의 이름을 바꿀 수 있습니까?

그래서

declareParameter(new SqlReturnResultSet("ScoreResultSet", mScoreMapper)); 

그것은 자동으로 결과 세트의 이름을 생성 할 때 현재도 사용하고있는 이름은 스프링에 의해 사용됩니다
List<Score> lAllScore = ((List<Score>)lAllScoreResult.get("ScoreResultSet")); 

.

이제 사용자가 선언 한 SqlReturnResultSet 매개 변수에서 매핑 된 결과 집합과 다른 결과 집합을 반환 할 수 있습니다.

======

편집 : Java StoredProcedure with SqlReturnResultSet not working과 우리가 같은 저장 프로 시저에 대해 이야기하는 것을 가정 :

나는 당신이 생각 난 그냥이 다른 당신의 질문을 발견

두 개는 저장 프로 시저에서 선택하고 두 개의 결과 집합을 반환합니다. 하나가 아닌 두 개의 SqlReturnResultSet 매개 변수를 선언해야합니다. 선언의 순서는 중요하므로 하나만 선언하고 두 번째 것에 보통 할당 된 이름을 지정할 수는 없습니다.

+0

당신 말이 맞았습니다. 내 Sp 내에서 3 개의 선택이있다. 올바른 정렬 순서로 속성을 설정하면 예상되는 결과가 발생합니다. 정말 고마워! –

+0

거의 같은 문제로 도와주세요. http://stackoverflow.com/q/30378061/2323234 – MRK187

0

List<Score>이 아닌 LinkedList으로 전송 해보세요.

튜토리얼은 다음과 같이 표시하며,이 튜토리얼 다르게했을 나는 그 생각을 할 수있는 유일한 일 :

List resultList = (LinkedList)results.get(Constants.RESULTSET); 

    //iterate of results list and print 
    for (Iterator it=resultList.iterator(); it.hasNext();) { 
     User user1 = (User)it.next(); 
     System.out.println(user1); 
    } 

    return resultList; 
+0

그게 나를 위해 작동하지 않습니다. –

+3

LinkedList에 캐스팅하는 것이 도움이되지 않습니다. LinkedList에는 List 인터페이스에없는 추가 메서드가 없습니다. –