作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 NamedParameterJdbcTemplate
在 Oracle 中运行 SQL。在 Oracle 数据库中运行时,在 SQL Developer 中传递参数时,它运行得绝对正常,但在使用 JdbcTemplate
java.sql.SQLSyntaxErrorException: ORA-00979: not a GROUP BY expression
我通过 map 传递参数,如下所示。
select to_char(c.created_dt, :GROUP_FORMAT) as point
,count(*) as CNT
from tableA c
where trunc(c.created_dt) >= to_date(:START_DATE,'YYYY-MM-DD')
and trunc(c.created_dt) <= to_date(:END_DATE,'YYYY-MM-DD')
group by to_char(c.created_dt, :GROUP_FORMAT)
return jdbcTemplate.query(sql,
ImmutableMap.<String, Object>builder()
.put("GROUP_FORMAT", groupFormat)
.put("END_DATE", Date.valueOf(endDate))
.put("START_DATE", Date.valueOf(startDate))
.build(), (rs, rowNum) -> {
ClassToMap data = ClassToMap.builder().point(rs.getString(1)).count(rs.getInt(2)).build();
return data;});
问题主要与GROUP_FORMAT
参数有关,已验证对GROUP_FORMAT
进行硬编码并且工作正常。传递的 GROUP_FORMAT
值将为 'YYYYMMDD'
或 'YYYYMM'
期望输出是 ClassToMap
对象的数组。
最佳答案
JdbcTemplate 不只是进行字符串连接,而是对参数进行包装。因此,您将无法将它们传递给“合成”表达式,例如“to_char”。或者,您可以按相同的未格式化列进行分组,这应该会给您带来相同的结果。
我已经在以下代码上对其进行了测试:
String groupFormat = "YYYYMMDD";
String sql = "select c.created_dt, to_char(c.created_dt, :groupFormat) as point" +
" ,count(*) as CNT" +
" from your_table c" +
" group by c.created_dt";
MapSqlParameterSource namedParameters = new MapSqlParameterSource();
namedParameters.addValue("groupFormat", groupFormat);
dbSelector.gssNamedJdbcTemplate().query(sql, namedParameters, rs -> {
logger.info(rs.getString(1));
});
关于java - JDBCTemplate 未给出带有参数的适当结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56052535/
这段代码在 Java 中的等价物是什么?我放了一部分,我对 I/O 部分感兴趣: int fd = open(FILE_NAME, O_WRONLY); int ret = 0; if (fd =
我正在尝试将维度为 d1,d2,d3 的张量 M[a1,a2,a3] reshape 为维度为 d2, d1*d3 的矩阵 M[a2,a1*a3]。我试过 M.reshape(d2,d1*d3) 但是
我是一名优秀的程序员,十分优秀!