JdbcTemplate参数数组方式查询失效,原因何在?
问题原因排查与解决
嘿,我一眼就发现了最直接的问题:你两段代码里的数据库表名不一致!
- 能正常运行的第一段SQL,查询的是
PACKAGE_DETAILS表 - 用占位符的第二段SQL,查的却是
MOBIS_PACKAGE_DETAILS表
如果 MOBIS_PACKAGE_DETAILS 这个表根本不存在,或者你的JDBC账号没有访问它的权限,那这段代码肯定跑不起来。
当然,除了表名的问题,也可以再排查这几个小细节:
- 检查字段类型匹配:虽然你传的是字符串,但如果
pack_code字段的字符集和你传入的字符串不兼容,也可能出问题(不过这个概率比较低) - 确认
jdbcTemplate实例:两段代码用的是不是同一个jdbcTemplate?如果是不同的数据源配置,说不定连的是不同的数据库/schema - 看具体错误日志:比如有没有抛出
EmptyResultDataAccessException(没查到数据)或者SQLException(表不存在/权限不足),日志里的错误信息才是定位问题的关键
把表名改成和第一段一致后,参数化SQL应该就能正常返回结果了,修正后的代码如下:
String sql_query_main_product = "SELECT pack_code FROM PACKAGE_DETAILS WHERE pack_code = ? "; Object[] objects = new Object[]{"ABC"}; String output = jdbcTemplate.queryForObject(sql_query_main_product, objects, String.class); log.info(output);
内容的提问来源于stack exchange,提问作者Manjula Sampath
相关产品推荐
相关产品推荐

