在运行这些Java/JDBC代码时,我会得到这个错误。有什么办法绕过它吗?
好像是在抱怨date_trunc函数中的参数?
org.postgresql.util.PSQLException:错误:语法错误位于或接近"$1"位置: 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')发布于 2014-02-04 15:57:56
当使用type 'string'语法(如timestamp '2014-11-11 -05:00:00' )时,提供的值必须是常量,而不是参数。它由SQL引擎在解析阶段、实际执行之前和参数值已知之前解释和转换为内部时间戳表示。
因此,当遇到timestamp $1时,解析器会产生语法错误,因为$1不是文字字符串。
另一方面,cast($1 as timestamp)的值将在执行阶段产生,因此这是应该使用的。
从JDBC的角度来看,cast(? as timestamp)应该是好的。带有双冒号的PostgreSQL特定语法?::timestamp也可能有效。
发布于 2015-04-15 16:30:21
当jdbc连接url组件中的任何一个为null时,我都看到了这样的错误。
例如,连接url组件,如DB主机名、dbname、用户或密码为null。
请查查那里,你应该找个线索。
https://stackoverflow.com/questions/21540527
复制相似问题