在java Spring中使用MapSqlParameterSource中的日期

时间:2016-11-29 11:49:39

标签: java spring spring-jdbc jdbctemplate sqlmap

我想在start_date和end_date之间获取结果,以便我可以找到我的产品报告。

sql = new StringBuilder()
            .append(" select oi.last_modified,oi.product_key")                      
            .append(" from orders o join order_item oi ")
            .append(" on oi.id_order = o.id  ");
            .append(" AND o.created between '")
            .append(":start_date")  // line - 1
            .append("' and '")      
            .append(":to_date");    // line - 2
两行中的

(第1行和第2行) 我正在尝试使用预防技术,因为我正在使用

MapSqlParameterSource namedParams = new MapSqlParameterSource();

所以为了达到这个目的,我尝试了很多组合,但没有运气。

namedParams.addValue("start_date","start_date",Types.TIMESTAMP);
namedParams.addValue("to_date","to_date",Types.VARCHAR);

我为不同的尝试得到了不同的错误。 即

  • java.util.Date无法强制转换为java.sql.Date
  • 带时区的类型时间戳的无效输入语法

2 个答案:

答案 0 :(得分:2)

我认为这也取决于您数据库字段的数据类型。例如,在MySQL中,有date, datetime and timestamp。 对于我来说,拥有一个MySQL UPDATE tblDM INNER JOIN tblIS ON ucase(tblDM.PatchDM) like '*'&ucase(tblIS.DMPatch)&'*' SET tblDM.Field1 = [tblIS].[Field1] 并使用java.util.Date对象创建一个datetime并指定有效的java.sql.DateTypes.TIMESTAMPstartDate对象):

java.util.Date

答案 1 :(得分:0)

我删除了单引号,它对我有用。

dynamicColumnsQuery = new StringBuilder();

dynamicColumnsQuery.append("SELECT concat(TO_CHAR(months, 'MonYY'),' Adverts') AS monthYear FROM generate_series(  CAST(:fromDate");

dynamicColumnsQuery.append(" as DATE) ,  CAST(:toDate");

dynamicColumnsQuery.append(" as DATE) , '1 month' ) AS months");