2010-11-25 6 views
1

SQL을 실행하고 결과를 가져 오기 위해 Spring-JDBC를 사용하고 있습니다.PreparedStatement - 모든 매개 변수를 바인딩하지 않습니다.

SELECT 
     SUM(spend) total_sum 
    FROM TABLE_NAME 
     WHERE 
     sup_id = ? AND  
     ((YEAR = ? AND period IN (?)) OR  
     (YEAR = ? AND period IN(?))) 

그리고 바인드 변수로 전달됩니다

final Object[] paramMap = { "1234", "2010", 
       "'01_JAN','02_FEB','03_MAR'", "2009", "'11_NOV','12_DEC'" }; 

final List<LeadTimeDto> query = getJdbcTemplate().query(sql, paramMap, 
       new RowMapper<LeadTimeDto>() { 
        @Override 
        public LeadTimeDto mapRow(final ResultSet resultSet, 
          final int arg1) throws SQLException { 
         final LeadTimeDto leadTimeDto = new LeadTimeDto(); 
         final String string = resultSet.getString("total_sum"); 
         System.out.println("ltime = " + string); 
         leadTimeDto.setLeadTime(string); 
         return leadTimeDto; 
        } 
       }); 

은 여기 무슨 일이 일어나고 있는지 모르겠어요. THIRD 매개 변수 바인딩에 문제가 있습니다. 아래와 같이 쿼리 자체에 세 번째 매개 변수의 값을 쓰면 작동합니다.

SELECT 
     SUM(spend) total_sum 
    FROM TABLE_NAME 
     WHERE 
     sup_id = ? AND  
     ((YEAR = ? AND period IN ('01_JAN','02_FEB','03_MAR')) OR  
     (YEAR = ? AND period IN(?))) 

따옴표 (')에 문제가있는 경우 FIFTH 매개 변수도 문제가되어야합니다. 그러나 그것은 구속력이 있습니다.

Map 및 Bean과 함께 getNamedParameterJdbcTemplate()을 사용하려했지만 행운이 없었습니다.

+0

당신이지고 어떤 오류 : 몇 가지 대안을 설명하는 다음 문서를 참조하십시오? –

+0

예외가 있습니까? 그렇다면 게시 pls –

+0

오류가 없습니다. 레코드가 꺼내지 않는 것뿐입니다. – HanuAthena

답변

2

IN 절에 대해 prepared statement 매개 변수를 사용하는 것은 내가 아는 한 합법적이지 않습니다.

http://www.javaranch.com/journal/200510/Journal200510.jsp#a2

+0

@Schneider : 고마워요. 효과가있었습니다. 혼자가 아닌 것 같습니다 : http://stackoverflow.com/questions/178479/alternatives-for-java-sql-preparedstatement-in-clause-issue – HanuAthena

관련 문제