gpt4 book ai didi

java - jdbcTemplate.queryForObject 在正常查询运行时返回 EmptyResultDataAccessException

转载 作者:太空宇宙 更新时间:2023-11-04 10:11:05 24 4
gpt4 key购买 nike

我正在尝试使用jdbcTemplate.queryForObject将普通查询更改为参数化查询,以避免SQL注入(inject)。但查询返回 EmptyResultDataAccessException - 结果大小不正确:预期为 1,实际为 0,其中正常查询工作正常。下面是正常的查询,我得到了正确的结果。

StringBuilder builder = new StringBuilder();
String AcctNameBuilder = adhpDetailUtil.getAccName();
builder.append("select * " +
"from gfc.LSI_ELGBLTY " +
"where INSURANCE_ID = '" + request.getInsuranceId() + "' and " +
"SYS_CD = '" + request.getSystemId() + "' and " +
"ACCT_TYPE in (" + AcctNameBuilder.toString() + ")");

这是我根据上述查询创建的参数化查询。

StringBuilder builder = new StringBuilder();
String AcctNameBuilder = adhpDetailUtil.getAccName();
final String QUERY = "select * " + "from gfc.LSI_ELGBLTY " + "where INSURANCE_ID = ? and " + "SYS_CD = ? and " + "ACCT_TYPE in (?)";
Object[] params = new Object[] {
request.getInsuranceId(),request.getSystemId(),AcctNameBuilder};
String ids = jdbcTemplate.queryForObject(QUERY, params, String.class);
builder.append(ids)

在第一种情况下,builder.append 包含确切的查询,而在第二种情况下,jdbcTemplate.queryForObject 返回EmptyResultDataAccessException。我在这里做错了什么。

最佳答案

我不相信你可以只为这样的“IN”子句附加 id。

“IN”子句的参数从技术上讲是一个数组。我几年前就遇到过这个问题,但我认为这个问题从未得到真正解决。

如果您考虑一下,这是一个相当困难的问题,因为用于准备语句的查询规划器无法有效地限制参数的数量。

关于java - jdbcTemplate.queryForObject 在正常查询运行时返回 EmptyResultDataAccessException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52311449/

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