2014-08-29 1 views
0

무엇이 잘못 되었는지 이해할 수 없으며 많은 시간을 queryForList (..) 메서드에서 내 String 객체를 가져 오는 데 많은 시간을 소비했습니다. 그래서 여기에이 바보 같은 SQL 쿼리 :Spring JdbcTemplate with parameter returns 빈 목록을 반환합니다.

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); 

추신 : 여기

내가 방법을 사용하는 방법, 방법입니다 getEmailById ("DN270391RKA") - 전달 된 사용자 ID 매개 변수입니다. 공백이 없습니다. 테이블의 ld.LDAP_EMAIL1 필드의

유형이다 : 나쁜 아이디 또는 SQL 쿼리 중 하나가 정확하지 않은 것 같다 있도록 NVARCHAR2 (381 CHAR)은

+0

db에'ldap_login'과'ldap_email1' 문자열이 있습니까? 사용자 ID를 SQL 쿼리에 "하드 코딩"하면 결과가 나타 납니까? – icza

+0

"나는 이것을 ''없이 시험해 보았습니다. '' 매개 변수이며 완벽하게 작동합니다. " 이 문장에 의해 나는 하드 코딩 된 매개 변수를 시도하고 작동한다는 것을 의미합니다. –

+0

필자가 의도 한 것은 사용자 ID를 "하드 코드"한 것입니다. 예를 들어, FROM ... WHERE ld.ldap_login = 'exampleUserId' " – icza

답변

0

입니다!

내 (기존 :-D) 테이블의 ld.ldap_login 값에 공백이 있습니다. 내 SQL 문을 사소한 편집 후 그것은 작동합니다. 방금이 열에 TRIM()을 추가했습니다.

"IPS.ldap ld에서 ld.LDAP_EMAIL1을 선택하십시오. 여기서 TRIM (ld.ldap_login) =?"

그렇다면 SQL 쿼리가 실행될 때 자동으로 TRIM()이 수행되고 PreparedStatement가 아닌 경우 TRIM()이 자동으로 수행됩니다.

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

이 줄은 완전히 올바른 것입니다.

가장 좋은 방법은 SQL 쿼리를 쿼리 브라우저에 기존 사용자 ID와 함께 붙여 넣은 다음 빈 결과 이상을 가져 왔는지 확인하는 것입니다.

그런 다음 jdbc 템플리트를 다시 사용하고 이전에 작업중인 사용자 ID를 하드 코딩하여 전달하고 동일한 결과를 얻는 지 확인하십시오.

또는 : userid 절을 삭제하고 사용자 ID와 관련이없는 항목을 모두 선택하십시오.

또한 ld.LDAP_EMAIL 확인은 무엇인지 내가 이해 String 표현 예컨대 VARCHAR/텍스트

+0

Oracle SQL 개발자에서 내 쿼리를 실행하면 작동합니다. 하드 코딩 된 쿼리를 사용할 때 (? param없이) 작동합니다. 위의 코드를 사용하면 작동하지 않습니다 ... aaaaahhh %^# $ # $$ # –

관련 문제