gpt4 book ai didi

java - Postgres 重叠符号未在 Java 中运行

转载 作者:行者123 更新时间:2023-12-02 09:39:48 24 4
gpt4 key购买 nike

我有一个查询来根据表中的两个时间戳列测试两个日期是否重叠。查询在数据库客户端中工作正常,但是当我将其添加到我的 java 代码中时,它失败并出现异常错误。我需要知道如何格式化查询中的 && 符号才能工作。

SELECT count(*) 
FROM attendance_jobs
WHERE tsrange( start_date, end_date) && tsrange(TIMESTAMP '2019-04-22', TIMESTAMP '2019-03-22 ')

这是我的java代码:

long count = jdbi.withHandle(handle -> {
return handle.createQuery("select count(*) from attendance_jobs where tsrange(start_date, end_date) && tsrange(timestamp :start_date, timestamp :end_date)")
.bind("start_date", start_date)
.bind("end_date", end_date)
.mapTo(Long.class)
.findOnly();
});

start_dateend_date 数据类型是时间戳。

org.jdbi.v3.core.statement.UnableToExecuteStatementException: org.postgresql.util.PSQLException: ERROR: syntax error at or near "$1"

最佳答案

这只是猜测,但我认为您应该再次看看 :start_date:end_date 的用法:

如果start_dateend_date(java变量)是Timestamp类型,您应该删除timestamp前缀:start_date :end_date。作为documentation说,jdbi 支持 java 类型 Timestamp:

Out of the box, Jdbi supports the following types as SQL statement arguments:
* ...
* java.sql: Blob, Clob, Date, Time, and Timestamp
* ...

所以我的猜测是你必须使用这样的查询:

long count = jdbi.withHandle(handle -> {
return handle.createQuery("select count(*) from attendance_jobs where tsrange(start_date, end_date) && tsrange(:start_date, :end_date)")
.bind("start_date", start_date)
.bind("end_date", end_date)
.mapTo(Long.class)
.findOnly();
});

另外,但这可能是个人喜好,我建议使用不同的拼写绑定(bind)变量和数据库列。后者带有下划线(就像您所做的那样),另一个采用驼峰式大小写,因此如果您使用相似的名称,则不会那么困惑。另外,在 java 变量中使用下划线并不常见,因此代码在我的拼写中看起来与此类似:

Timestamp startDate = ...;
Timestamp endDate = ...;
String queryString = "select count(*) from attendance_jobs "
+ "where tsrange(start_date, end_date) && tsrange(:startDate, :endDate)";
long count = jdbi.withHandle(handle -> {
return handle.createQuery(queryString)
.bind("startDate", startDate)
.bind("endDate", endDate)
.mapTo(Long.class)
.findOnly();
});

关于java - Postgres 重叠符号未在 Java 中运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57191558/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com