java - 组织.postgresql.util.PSQLException : ERROR: syntax error at or near "$1"

标签 java postgresql jdbc

我收到这个 PSQLException:

org.postgresql.util.PSQLException: ERROR: syntax error at or near "$1"
  Position: 37

当我运行以下代码时:

ps = connection.prepareStatement("SELECT current_timestamp + INTERVAL ?;");
ps.setString(1, "30 minutes");
System.out.println(ps);
rs = ps.executeQuery();

但是,println 函数在控制台中显示如下:

SELECT current_timestamp + INTERVAL '30 minutes'

谁知道怎么回事?控制台中的查询在 pgAdmin 中运行良好,所以我知道这不是语法错误。

最佳答案

虽然语法 INTERVAL '30 minutes' 在您直接在控制台中编写 SQL 时是有效的,但它实际上被认为是一个 interval literal 而不会起作用其中单词 INTERVAL 之后的字符串不是文字字符串。

PostgreSQL 中的准备语句是在服务器端使用 PREPARE 实现的每个 ? 都被视为服务器上的实际变量。这也是它提示 $1 的原因,尽管您从未在声明中写过 $

因此,文字语法不适用于准备好的语句。

不要让准备好的语句的字符串表示(println 的结果)让您感到困惑 - 它不是服务器所看到的。服务器在那里看到一个变量。

因此,您需要使用接受字符串(可以是变量或文字)并将其转换为区间的语法。例如 ?::INTERVALCAST(? AS INTERVAL)

因此,这不是错误。

关于java - 组织.postgresql.util.PSQLException : ERROR: syntax error at or near "$1",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33058684/

相关文章:

python - : CREATE EXTENSION plpython3u; on PostgreSQL 9. 6.0 期间出错

Java - 尝试与远程 SQL 数据库建立连接

java - 更新按钮颜色

Android 应用程序上的 Java 计时器

postgresql - 按周向 date_trunc 添加月份约束

java - java中如何为不同的数据库创建多个数据库连接

java - 在java中将一个jpg文件添加到mysql数据库

java - 命令按钮操作中的 MethodNotFoundException

Java 递归 - 我这样做对吗?

php - 带有 PDO 准备语句的 postgresql to_tsquery()