2014-08-29 2 views
0

Я не могу понять, что с ним не так, я потратил много часов, пытаясь получить мой объект String из метода queryForList (..) и все для ничего. Итак, вот этот глупый sql запрос:Spring JdbcTemplate с параметром возвращает пустой Список

String GET_EMAIL_BY_LDAP = "select ld.LDAP_EMAIL1 from IPS.ldap ld where ld.ldap_login = ?" 

Я пробовал это и без '?' параметр и работает отлично.

Вот так, как я использую метод:

List<String> email = jdbcTemplate.queryForList(GET_EMAIL_BY_LDAP, String.class, userId.toUpperCase()); 

И эту версию метода также возвращает пустой список:

List<String> email = jdbcTemplate.queryForList(GET_EMAIL_BY_LDAP, new Object[]{userId.toUpperCase()}, String.class); 

P.S. getEmailById ("DN270391RKA") - это мой идентификатор пользователя, который прошел. У него нет пробелов.

Тип поля ld.LDAP_EMAIL1 в таблице: NVARCHAR2 (381 CHAR)

+0

Строки 'ldap_login' и' ldap_email1' в db? Получаете ли вы результат, если вы «жестко кодируете» идентификатор пользователя в SQL-запрос? – icza

+0

«Я тоже пробовал это без?» параметр, и он отлично работает ». Под этим предложением я имею в виду, что я пробовал жестко закодированный параметр, и он работает. –

+0

Я имел в виду «жесткий код» идентификатор пользователя, например: '' select ... FROM ... WHERE ld.ldap_login = 'exampleUserId' "' – icza

ответ

0

я понял, что это было!

Значения ld.ldap_login в моей (legacy :-D) таблице имеют пробелы. После незначительного редактирования моего оператора sql он работает. Я только что добавил TRIM() в этот столбец.

Выберите ld.LDAP_EMAIL1 из IPS.ldap ld где TRIM (ld.ldap_login) =? "

Итак, кажется, что это обычный sql-оператор, тогда, когда я выполняю запрос, база данных oracle делает TRIM() автоматически, а в случае PreparedStatement этого не делает.

0
List<String> email = jdbcTemplate.queryForList(GET_EMAIL_BY_LDAP, String.class, userId.toUpperCase()); 

Эта линия полностью правильно, так что, как представляется, либо плохой идентификатор пользователя или ваш запрос не является правильным.

Лучший способ заключается в том, чтобы вставить ваш запрос sql с существующим идентификатором пользователя в браузере запросов и проверить, есть ли у вас больше, чем пустой результат.

затем снова используйте шаблон jdbc и пропустите жесткий код ранее работающего идентификатора пользователя и проверьте, получили ли вы те же результаты.

или: удалить предложение userid и выбрать все, не относящиеся к идентификатору пользователя.

Также убедитесь, что ld.LDAP_EMAIL является Строковое представление VARCHAR например/текст

+0

Когда я выполняю свой запрос в разработчике Oracle SQL, он работает. Когда я использую жестко запрограммированный запрос (без? Param в нем), он работает. Когда я использую код выше, он не работает ... aaaaahhh%^# $ # $$ # –

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