Java JDBC模板:MS SQL日期时间列查询

Java JDBC模板:MS SQL日期时间列查询,java,sql-server,spring-jdbc,jdbctemplate,Java,Sql Server,Spring Jdbc,Jdbctemplate,我有一个MS SQL DN,其中有一个名为“Load”的表,该表有一个datetime类型的“Load\u starttime”列。我的查询试图计算特定日期插入的行数。我跟随本教程学习了一年 我目前的例外是 org.springframework.dao.DataIntegrityViolationException: PreparedStatementCallback; SQL [SELECT COUNT(load_starttime) FROM Load WHERE load_startti

我有一个MS SQL DN,其中有一个名为“Load”的表,该表有一个datetime类型的“Load\u starttime”列。我的查询试图计算特定日期插入的行数。我跟随本教程学习了一年

我目前的例外是

org.springframework.dao.DataIntegrityViolationException: PreparedStatementCallback; SQL [SELECT COUNT(load_starttime) FROM Load WHERE load_starttime=:load_starttime]; Unable to convert between org.springframework.jdbc.core.namedparam.MapSqlParameterSource and JAVA_OBJECT.; nested exception is java.sql.SQLException: Unable to convert between org.springframework.jdbc.core.namedparam.MapSqlParameterSource and JAVA_OBJECT.
at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:101)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:603)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:637)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:666)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:674)
at org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:729)
at org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:745)
at org.springframework.jdbc.core.JdbcTemplate.queryForInt(JdbcTemplate.java:776)
第二部分

Caused by: java.sql.SQLException: Unable to convert between org.springframework.jdbc.core.namedparam.MapSqlParameterSource and JAVA_OBJECT.
at net.sourceforge.jtds.jdbc.Support.convert(Support.java:446)
at net.sourceforge.jtds.jdbc.JtdsPreparedStatement.setObjectBase(JtdsPreparedStatement.java:370)
at net.sourceforge.jtds.jdbc.JtdsPreparedStatement.setObject(JtdsPreparedStatement.java:668)
at org.springframework.jdbc.core.StatementCreatorUtils.setValue(StatementCreatorUtils.java:365)
at org.springframework.jdbc.core.StatementCreatorUtils.setParameterValueInternal(StatementCreatorUtils.java:217)
at org.springframework.jdbc.core.StatementCreatorUtils.setParameterValue(StatementCreatorUtils.java:145)
at org.springframework.jdbc.core.ArgPreparedStatementSetter.doSetValue(ArgPreparedStatementSetter.java:65)
at org.springframework.jdbc.core.ArgPreparedStatementSetter.setValues(ArgPreparedStatementSetter.java:46)
at org.springframework.jdbc.core.JdbcTemplate$1.doInPreparedStatement(JdbcTemplate.java:642)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:587)
我想这是由于

JdbcTemplate template = new JdbcTemplate(getDataSource());
试着用它来做

NamedParameterJdbcTemplate jdbcTemplate = new NamedParameterJdbcTemplate(getDataSource());
JdbcTemplate仅适用于

JdbcTemplate-这是经典的Spring JDBC方法,也是使用最广泛的方法。这是“最低级别”方法和所有其他方法 方法在封面下使用JDBC模板。在JDK中运行良好 1.4和更高的环境

NamedParameterJdbcTemplate包装JdbcTemplate,以提供更方便的命名参数使用,而不是传统的JDBC “?”占位符。这提供了更好的文档和易用性 当SQL语句有多个参数时。与JDK一起工作 1.4及以上


这被认为是一个命名参数*load\u starttime=:load\u starttime*

JdbcTemplate类不支持命名参数。此任务必须使用“NamedParameterJdbcTemplate”类。 请参阅下面的源代码以执行您想要的操作:

final NamedParameterJdbcTemplate=new NamedParameterJdbcTemplate(数据源);
最终日期d=新日期(“2014-02-06”);
int count=template.queryForObject(
“从加载中选择计数(加载开始时间),其中加载开始时间=:加载开始时间”,
新的MapSqlParameterSource().addValue(“load_starttime”,新的java.sql.Date(d.getTime()),
整数类
);
NamedParameterJdbcTemplate jdbcTemplate = new NamedParameterJdbcTemplate(getDataSource());