gpt4 book ai didi

java - ReadyStatement - 不绑定(bind)所有参数

转载 作者:行者123 更新时间:2023-11-30 05:08:32 24 4
gpt4 key购买 nike

我正在使用 Spring-JDBC 执行 SQL 并获取结果。

 SELECT 
SUM(spend) total_sum
FROM TABLE_NAME
WHERE
sup_id = ? AND
( ( YEAR = ? AND period IN ( ? ) ) OR
( YEAR = ? AND period IN(?)))

绑定(bind)变量传递为:

final Object[] paramMap = { "1234", "2010",
"'01_JAN','02_FEB','03_MAR'", "2009", "'11_NOV','12_DEC'" };

final List<LeadTimeDto> query = getJdbcTemplate().query(sql, paramMap,
new RowMapper<LeadTimeDto>() {
@Override
public LeadTimeDto mapRow(final ResultSet resultSet,
final int arg1) throws SQLException {
final LeadTimeDto leadTimeDto = new LeadTimeDto();
final String string = resultSet.getString("total_sum");
System.out.println("ltime = " + string);
leadTimeDto.setLeadTime(string);
return leadTimeDto;
}
});

我不确定这里发生了什么。我遇到了第三个参数的绑定(bind)问题。如果我在查询本身中写入第三个参数的值,如下所示,它就可以工作。

 SELECT 
SUM(spend) total_sum
FROM TABLE_NAME
WHERE
sup_id = ? AND
( ( YEAR = ? AND period IN ( '01_JAN','02_FEB','03_MAR' ) ) OR
( YEAR = ? AND period IN(?)))

如果是引号(') 的问题,那么第五个参数也应该是问题所在。但它绑定(bind)得很好。

我尝试过将 getNamedParameterJdbcTemplate() 与 Map 和 Bean 一起使用,但没有成功。

最佳答案

据我所知,对 IN 子句使用准备好的语句参数是不合法的。请参阅以下文章,其中描述了一些替代方案:

http://www.javaranch.com/journal/200510/Journal200510.jsp#a2

关于java - ReadyStatement - 不绑定(bind)所有参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4274918/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com