在postgresql中,如果是 "没有时区的时间戳",在Java中参数的类型应该是什么?[英] What should the type of parameter be in Java when it is a "timestamp without time zone" in postgresql?

本文是小编为大家收集整理的关于在postgresql中,如果是 "没有时区的时间戳",在Java中参数的类型应该是什么?的处理方法,想解了在postgresql中,如果是 "没有时区的时间戳",在Java中参数的类型应该是什么?的问题怎么解决?在postgresql中,如果是 "没有时区的时间戳",在Java中参数的类型应该是什么?问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我正在尝试通过 Java 和 JDBC 在 postgresql 中运行查询.

postgresql中"table"的"activitydate"列是"timestamp without time zone".我尝试使用 String 传递日期但没有用(org.postgresql.util.PSQLException: ERROR: operator does not exist: timestamp without time zone > character varying).

我应该使用什么类型而不是 String 来存储"start_date"和"end_date"并将它们传递给查询?

BTW SELECT COUNT(*) FROM table WHERE activitydate > '2014-11-20' AND activitydate < '2014-11-21' AND zipcode = 12345 在 pgadmin 中完美运行.

public Response query(
          @QueryParam("start_date") String start_date,
          @QueryParam("end_date") String end_date,
          @QueryParam("zipcode") String zipcode
          ) throws Exception {
...
...

pstmt = conn.prepareStatement("SELECT COUNT(*) FROM table WHERE activitydate > ? AND activitydate < ? AND zipcode = ?");

pstmt.setString(1, start_date); 
pstmt.setString(2, end_date); 
pstmt.setString(3, zipcode); 

更新:我把它改成 java.sql.Timestamp 还是不行:

public Response query(
          @QueryParam("start_date") Timestamp start_date,
          @QueryParam("end_date") Timestamp end_date,
          @QueryParam("zipcode") String zipcode
          ) throws Exception {
...
...

pstmt = conn.prepareStatement("SELECT COUNT(*) FROM table WHERE activitydate > ? AND activitydate < ? AND zipcode = ?");

pstmt.setTimestamp(1, start_date); 
pstmt.setTimestamp(2, end_date); 
pstmt.setString(3, zipcode);

推荐答案

你必须使用 java.sql.Timestamp 或 java.sql.Date.

本文地址:https://www.itbaoku.cn/post/1763843.html