由:org.h2.jdbc.jdbcsqldataexception:无法解析“时间戳记”持续的

发布于 2025-01-25 14:01:37 字数 683 浏览 1 评论 0原文

我在测试环境中的简单请求H2遇到了一个小问题,如下所示:

例外:

Caused by: org.h2.jdbc.JdbcSQLDataException: Cannot parse "TIMESTAMP" constant ":localDateTime"
String query="select * from Article E1 WHEN E1.date> " + "':localDateTime'" "

namedParameterJdbcTemplate.queryForObject(query, mapParameters(), Object.class);

private MapSqlParameterSource mapParameters() {
    DateTimeFormatter dtf1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
    MapSqlParameterSource parameters = new MapSqlParameterSource();
    parameters.addValue("localDateTime", Timestamp.valueOf(LocalDateTime.now().format(dtf1)), TIMESTAMP);

}

I Faced a little problem with a simple request H2 in test environment that is as follows:

Exception:

Caused by: org.h2.jdbc.JdbcSQLDataException: Cannot parse "TIMESTAMP" constant ":localDateTime"
String query="select * from Article E1 WHEN E1.date> " + "':localDateTime'" "

namedParameterJdbcTemplate.queryForObject(query, mapParameters(), Object.class);

private MapSqlParameterSource mapParameters() {
    DateTimeFormatter dtf1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
    MapSqlParameterSource parameters = new MapSqlParameterSource();
    parameters.addValue("localDateTime", Timestamp.valueOf(LocalDateTime.now().format(dtf1)), TIMESTAMP);

}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

纸短情长 2025-02-01 14:01:37

您的问题是围绕命名参数的引号。

+ "':localDateTime'"

应该是

+ ":localDateTime"

jdbc准备的语句参数在文字中未识别。因此,H2看到一个看起来像'的日期:LocalDateTime',该日期无法识别为有效的日期。


我找不到有关此的确定参考(例如在JDBC规格中),但是准备好的语句参数只能在SQL中使用,其中需要一个(完整的)SQL值;例如表达式或亚表达。您不能在文字中使用参数,也不能参数化列名称或表名。而且,您不能使用一个注入SQL Server端评估的表达式。

Your problem is the quotes around the named parameter.

+ "':localDateTime'"

should be

+ ":localDateTime"

JDBC prepared statement parameters are not recognized inside a literal. So H2 sees a date literal that looks like ':localDateTime' which is doesn't recognize as a valid date.


I cannot find a definitive reference for this (e.g. in the JDBC specs) but prepared statement parameters can only be used in the SQL where a (complete) SQL value is required; e.g. a expression or sub-expression. You cannot use a parameter within a literal, or to parameterize a column name or table name. And you cannot use one to inject an expression to be evaluated on the SQL server side.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文