2014-11-28 7 views
0

안녕하세요, 다음 코드를 가지고 있습니다. 내가 결과를 실행하면 기본적으로 내가 이렇게 내 코드에서 스프링 jdbc 템플릿 쿼리가 여러 개의 인자를 가진 빈 결과를 반환합니다.

public static final MY_QUERY = "Select distinct A.col1, A.col2 from tableA, tableB where A.col1 = ? and A.col2 = ? and b.id = A.id"; 

은 ...

public List<MyClass> getData(final String input1, final String input2) { 
    return this.jdbcTemplate.query(MyQuery, 
        new Object[] { input1, input2}, 
        new int[] {Types.VARCHAR, Types.CHAR}, new MyMapper()); 
} 

.. 그것은 빈 목록을 반환합니다.

지금 내가 이렇게하면.

public static final MY_QUERY_2 = new StringBuilder(96) 
.append("Select distinct A.col1, B.col2 from tableA, tableB where A.col1 =").append(input1) 
.append(" and A.col2 = ").append(input2).append(" and b.id = A.id").toString(); 

내 DAO 클래스

public List<MyClass> getData() { 
    return this.jdbcTemplate.query(MY_QUERY_2, new MyMapper()); 
} 

내부

나는 세 가지 결과를 얻을 수 있습니다.

첫 번째 구현이 잘못되었습니다.

참고 : 하나 이상의 인수를 사용하는 경우 작동하지만 2를 사용하는 경우보다 않습니다.

+0

데이터베이스의 col1과 col2의 데이터 유형은 무엇입니까? VARCHAR 및 CHAR? 또한 SQL 주입 공격에 취약하기 때문에 두 번째 방법보다 첫 번째 방법을 선호하십시오. – toddlermenot

+0

예 그들은 VARCHAR 및 CHAR입니다. 나는 그것이 어떻게 든 비어있는 결과를주는 것처럼 일하는 첫 번째 방법을 얻을 수 없다. –

+0

데이터베이스에서이 쿼리를 실행하고 결과를 게시 할 수 있습니까? 'select * from v $ sql where 'sql_text like'% Select distinct A.col1 % '' – toddlermenot

답변

0

문제점을 발견했습니다.

전 트림에 비해

A.Col2 = 'Input2' 

가 호출되고 사용하는 경우.

나는 공백을 없애
trim(A.Col2) = ? 

를 사용하여 그것을 해결.