【发布时间】:2015-04-02 07:38:04
【问题描述】:
我正在尝试通过 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的实例并使用setTimestamp()传递它 -
您介意详细说明一下吗?我改成“@QueryParam("start_date") Timestamp start_date, @QueryParam("end_date") Timestamp end_date" + "pstmt.setTimestamp(1, start_date); pstmt.setTimestamp(2, end_date);"但是还是不行工作。
-
从 JDBC 4.2 开始,使用 java.time 对象进行此类工作。
标签: java postgresql jdbc