jdbctemplate-queryForList-通过日期?

时间:2019-04-09 04:25:18

标签: java spring jdbc

我正在编写一个小型的Spring应用程序,它在以下代码的上下文中具有jdbc功能...

我具有以下Java来设置SQL查询字符串:

    String sql =
            "SELECT " +
                    "    a.Id, " +
                    "    a.USER_ID ", " +
                    "    a.LAST_UPDATED " +
                    "from " +
                    "    Schema.AwesomeTable a " +
                    "where " +
                    "    a.LAST_UPDATED >= ?";

并且我正在尝试使用一个日期对象(让我们想象一下,为了简短起见,我正在使用当前日期):

Date myDate = new Date(); // This is a java.util.Date

我这样调用查询:

List<Map<String, Object>> rows = jdbcTemplate.queryForList(sql, new Object[]{myDate});

运行此命令时-我收到此错误:

2019-04-08 23:17:58 - Setting SQL statement parameter value: column index 1, parameter value [Tue Apr 08 23:17:58 CDT 2019], value class [java.util.Date], SQL type unknown

我真的可以使用一些帮助-我到处都在Google周围搜索,并且找到了一些信息,但是我似乎看不到任何东西。

2 个答案:

答案 0 :(得分:0)

您可以将参数包装在java.sql.Date中或使用:

import java.util.Date;
import java.time.LocalDate;

LocalDate dateTime = // some date here
Date startDate = Date.from(dateTime.atStartOfDay(ZoneId.systemDefault()).toInstant());

答案 1 :(得分:0)

您不能在SQL查询中直接使用myDate类型的java.util.Date变量

Date myDate = new Date(); // This is a java.util.Date

您必须将其转换为java.sql.Date类型,您可以执行以下操作:

java.sql.Date sqlDate = new java.sql.Date(myDate.getTime());

之后,您可以像这样调用查询:

List<Map<String, Object>> rows = jdbcTemplate.queryForList(sql,sqlDate);

将按预期工作。