2014-03-25 3 views
0

NameParameterJdbcTemplate을 사용하여 쿼리의 페이지를 매기는 방법은 무엇입니까?NameParameterJdbctemplate을 사용하여 쿼리의 페이지 매기기

..이 내 쿼리를 나는 필수 JdbcTemplate을 함께하려고했지만, 난 몇 가지 실수를 :

sql.append("SELECT VGPT_EXE.* FROM ") 
    .append(Constants.T_VW_GPT_E_BASIC) 
    .append(" AS VGPT_EXE ") 
    .append("WHERE VGPT_EXE.") 
    .append(Constants.ID_SUBJECTE 
    + " in (:listOfValues)"); 



    PreparedStatementCreatorFactory pscf; 
    MapSqlParameterSource parameterss = new MapSqlParameterSource(); 
    parameterss.addValue("listOfValues", ids); 
    pscf = new PreparedStatementCreatorFactory(sql.toString()); 
    pscf.setResultSetType(ResultSet.TYPE_SCROLL_INSENSITIVE); 

그래서 나는 namedParameter 쿼리 I 수 없습니다 세터 목록 값 믿는 문제? 또는 나는 sth 잘못하고있다.

resultat.setResultats((List<IDeute>) template.getJdbcOperations() 
           .query((PreparedStatementCreator) pscf.newPreparedStatementSetter(new ArrayList<Long>(parameterss.getValues().values())), 
           new ResultSetPaginatExtractor(new MapperDeute(), 
           resultat.getFiles(), 
           resultat.getInici()))); 

ResultSetPaginatExtractor 내가 파일 수 및 fisrt 행을 설정할 수 ResultSetExtractor의 구현이다.

스택 트레이스 :

nested exception is org.springframework.dao.DataRetrievalFailureException: S'ha produit un error en la recuperació del deute associat a la clau de subjecte 3375876; nested exception is org.springframework.dao.InvalidDataAccessApiUsageException: SQL [SELECT VGPT_EXE.* FROM vw_gpt_e_basic AS VGPT_EXE WHERE VGPT_EXE.id_subjecte in (:listOfValues) ORDER BY VGPT_EXE.cc_cod_prov, VGPT_EXE.cc_cod_emisor, VGPT_EXE.cc_cod_concepte, VGPT_EXE.cc_any, VGPT_EXE.cc_periode, VGPT_EXE.cc_num_rebut]: given 1 parameters but expected 0 

답변

0

잘 .. NamedParameterdJd에 오류 것 같다 그래서 나는 JdbcTemplate을 원래로 변경합니다.

sql.append("SELECT VGPT_EXE.* FROM ") 
     .append(Constants.T_VW_GPT_E_BASIC) 
     .append(" AS VGPT_EXE ") 
     .append("WHERE VGPT_EXE.") 
     .append(Constants.ID_SUBJECTE 
     + " IN ("); 

for (int i = 0; i < ids.size(); i++) { 
    if (i > 0) { 
    sql.append(","); 
     } 
    sql.append("?");**for every dinamic id add an ?** 
    parametres.add(ids.get(i)); 
    tipusParametres.add(new SqlParameter(Types.INTEGER)); 
} 
    sql.append(")"); 
    sql.append(" AND VGPT_EXE." + Constants.ID_ENS_EXP + " = ? "); 
       parametres.add(idEns); 
       tipusParametres.add(new SqlParameter(Types.INTEGER)); 

       if (tipusDeute != null) { 
        if (tipusDeute.equals(ETipusDeute.HISTORIC)) { 
         sql.append(" AND " + Constants.DATA_FI_VOL 
           + " < TODAY "); 
        } 
        if (tipusDeute.equals(ETipusDeute.VIGENT)) { 
         sql.append(" AND " + Constants.DATA_FI_VOL 
           + " >= TODAY "); 
        } 
       } 
       // ordenació per la clau 
       sql.append(ORDER_BY_E); 
       try { 

       pscf = new PreparedStatementCreatorFactory(sql.toString()); 
       // El resultset HA DE SER DEL TIPUS TYPE_SCROLL_INSENSITIVE 
       pscf.setResultSetType(ResultSet.TYPE_SCROLL_INSENSITIVE); 
       for (SqlParameter sp : tipusParametres) { 
        pscf.addParameter(sp); 
       } 

       resultat.setResultats((List<IDeute>) template.getJdbcOperations().query(pscf.newPreparedStatementCreator(parametres.toArray()), new ResultSetPaginatExtractor(new MapperDeute(), 
         resultat.getFiles(), 
         resultat.getInici()))); 

나는 그것이 소네 도움이되기를 바랍니다 :

이 최종 코드 작업이다.