我运行这个Java/JDBC代码时遇到了这个错误。有没有想法如何解决它?
看起来它在抱怨 date_trunc 函数中的参数?
org.postgresql.util.PSQLException: ERROR: syntax error at or near "$1" Position: 100
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryEx
ecutorImpl.java:2161)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutor
Impl.java:1890)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.ja
va:255)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Stat
ement.java:560)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(Abstract
Jdbc2Statement.java:417)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc
2Statement.java:302)
Java 代码:
static PreparedStatement searchErrorPP = connection.prepareStatement(
"select count(*) from tracking where date_trunc('day', run_date) <=
date_trunc('day', timestamp ?)");
public static int queryCount(java.util.Date date) throws SQLException {
PreparedStatement ps = null;
try {
ps = searchErrorPP;
ps.setDate( 1, new java.sql.Date(date.getTime()));
ResultSet rs = ps.executeQuery();
在pgAdmin中执行正常的查询结果:
select count(*) from tracking where date_trunc('day', run_date) <=
date_trunc('day', timestamp '2014-11-11 -05:00:00')
date_trunc
吗?PostgreSQL 本地使用编号占位符$1
、$2
等,因此?
占位符在内部可能被转换为编号占位符,因此错误消息中出现了$2
。 - mu is too shortdate_trunc
替换了 Oracle 的trunc
以实现相同的结果。原则上查询运行良好,因此我正在尝试将其集成到 Java 中。如果不起作用,我可能会尝试您所说的直接使用 Date 对象而不是使用 date_trunc。 - Say No To Censorship?::timestamp
或cast(? as timestamp)
是否更好?我没有设置所有的Java东西,所以我只是猜测。 - mu is too short