2014-11-28 6 views
0

Привет, у меня есть следующий код.Запрос шаблона Spring 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, где sql_text like '% Select distinct A.col1%'' – toddlermenot

ответ

0

Я нашел проблему.

, если я использую

A.Col2 = 'Input2' 

чем аккуратный вызываются.

я решил его с помощью

trim(A.Col2) = ? 

, чтобы избавиться от пробелов.

Смежные вопросы