带参数的Spring JdbcTemplate返回空List

时间:2014-08-29 11:04:40

标签: java sql oracle spring-jdbc

我无法理解它有什么问题,我花了很多时间尝试从方法queryForList(..)获取我的String对象,并且一无所获。所以在这里这个愚蠢的SQL查询:

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:

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

P.S。 getEmailById(“DN270391RKA”) - 这是我传递的用户id参数。它没有空格。

表中的ld.LDAP_EMAIL1字段类型为:NVARCHAR2(381 CHAR)

2 个答案:

答案 0 :(得分:1)

我明白这是什么!

ld.ldap_login我的(legacy:-D)表中的值有一个拖尾空格。经过对我的sql语句的轻微编辑后,它可以工作。我刚刚在这个专栏上添加了TRIM()。

&#34;从IPS.ldap ld中选择ld.LDAP_EMAIL1,其中TRIM(ld.ldap_login)=?&#34;

所以,似乎它是通常的sql语句然后当我执行查询时,oracle数据库自动执行TRIM(),并且在PreparedStatement的情况下不执行。

答案 1 :(得分:0)

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

此行完全正确,因此它似乎是一个错误的userID或您的SQL查询不正确。

最好的方法是在查询浏览器中使用现有用户ID粘贴sql查询,并检查是否获得的结果为空。

然后再次使用jdbc模板并传递硬编码的先前工作用户ID,并检查是否得到相同的结果。

或:删除userid子句并选择所有不特定于用户ID的子句。

还要确保ld.LDAP_EMAIL是字符串表示形式,例如varchar / text