首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >参数化查询请求postgresql

参数化查询请求postgresql
EN

Stack Overflow用户
提问于 2022-04-15 20:29:01
回答 2查看 93关注 0票数 1

我希望在get请求中从我的数据库获得数据,其中LocalDateTime等于LocalDateTime。

代码语言:javascript
代码运行次数:0
运行
复制
@Override
    public List<Timeslot> getAllAvailable(LocalDateTime localDateTime) {
        return jdbcTemplate.query("select * from timeslot where day = ?", TIMESLOT_ROW_MAPPER);
    }

时隙表代码:

代码语言:javascript
代码运行次数:0
运行
复制
CREATE TABLE "timeslot" (
    "timeslot_id" serial,
    "day" date NOT NULL,
    "start_time" TIME NOT NULL,
    "end_time" TIME NOT NULL,
    "user_id" serial NOT NULL,
    "is_recorded" boolean,
    CONSTRAINT "timeslot_pk" PRIMARY KEY ("timeslot_id")
);

控制器代码:

代码语言:javascript
代码运行次数:0
运行
复制
@GetMapping("/allAvailable")
    public List<Timeslot> getAllAvailable(@RequestParam("day") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime day) {
        return userService.allAvailable(day);
    }

但是,当我执行这个请求时,控制台的结果是:org.postgresql.util.PSQLException: ERROR: syntax error at end of input。如何更改sql请求代码以修复此错误?我应该使用PrepareStatement还是其他什么的?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-04-16 04:19:18

我认为您正在将day作为Date格式存储在数据库中。在查询中,您将比较day (其类型为Date )和LocalDateTime类型(这可能是错误的)。首先从Date中获取LocalDateTime,然后作为方法参数传递。例如

代码语言:javascript
代码运行次数:0
运行
复制
jdbcTemplate.query("select * from timeslot where day = ?", TIMESLOT_ROW_MAPPER, localDateTime.toLocalDate());
票数 1
EN

Stack Overflow用户

发布于 2022-04-16 00:05:37

正如@AndrewS所提到的,您没有将localDateTime值作为参数传递。因此,jdbcTemplate不将?绑定到localDateTime。

您应该使用query的重载方法并传递localDateTime作为最后一个参数:

代码语言:javascript
代码运行次数:0
运行
复制
jdbcTemplate.query("select * from timeslot where day = ?", TIMESLOT_ROW_MAPPER, localDateTime);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71888661

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档