【问题标题】:Use date in MapSqlParameterSource in java Spring在 java Spring 的 MapSqlParameterSource 中使用日期
【发布时间】:2017-04-13 09:48:33
【问题描述】:

我想获取 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
  • 带时区的时间戳类型的输入语法无效

【问题讨论】:

  • :start_date 和 :to_date 的数据类型是什么
  • 为什么你的中间条件中有引号(')?
  • @ThomasRisberg 这是日期检查器,所以我使用单引号。
  • @kuhajeyan 都是 db 中的时间戳数据类型

标签: java spring spring-jdbc jdbctemplate sqlmap


【解决方案1】:

我认为这也取决于您的数据库字段的数据类型。例如在 MySQL 中有date, datetime and timestamp。 对我来说,有一个 MySQL datetime 并使用 java.util.Date 对象创建一个 java.sql.Date 并指定 Types.TIMESTAMP 工作(startDatejava.util.Date 对象):

MapSqlParameterSource namedParams = new MapSqlParameterSource();
namedParams.addValue("start_date", new java.sql.Date(startDate.getTime()), Types.TIMESTAMP);

【讨论】:

    【解决方案2】:

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

    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");
    

    【讨论】:

      猜你喜欢
      • 2019-01-02
      • 2021-11-05
      • 2017-07-29
      • 2016-11-13
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      • 2018-06-26
      • 1970-01-01
      相关资源
      最近更新 更多