由:org.h2.jdbc.jdbcsqldataexception:无法解析“时间戳记”持续的
我在测试环境中的简单请求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 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您的问题是围绕命名参数的引号。
应该是
jdbc准备的语句参数在文字中未识别。因此,H2看到一个看起来像
'的日期:LocalDateTime'
,该日期无法识别为有效的日期。我找不到有关此的确定参考(例如在JDBC规格中),但是准备好的语句参数只能在SQL中使用,其中需要一个(完整的)SQL值;例如表达式或亚表达。您不能在文字中使用参数,也不能参数化列名称或表名。而且,您不能使用一个注入SQL Server端评估的表达式。
Your problem is the quotes around the named parameter.
should be
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.