Kev*_*iss 14 java postgresql jdbc
我得到这个PSQLException:
org.postgresql.util.PSQLException: ERROR: syntax error at or near "$1"
Position: 37
Run Code Online (Sandbox Code Playgroud)
当我运行以下代码时:
ps = connection.prepareStatement("SELECT current_timestamp + INTERVAL ?;");
ps.setString(1, "30 minutes");
System.out.println(ps);
rs = ps.executeQuery();
Run Code Online (Sandbox Code Playgroud)
但是,println函数在控制台中显示:
SELECT current_timestamp + INTERVAL '30 minutes'
Run Code Online (Sandbox Code Playgroud)
谁知道什么是错的?控制台中的查询在pgAdmin中运行正常,所以我知道它不是语法错误.
Rea*_*tic 19
虽然在INTERVAL '30 minutes'直接在控制台中编写SQL时语法是有效的,但它实际上被认为是区间文字,并且在单词INTERVAL后面的字符串不是文字字符串的情况下不起作用.
PostgreSQL中的预处理语句在服务器端实现,PREPARE并且每个语句都?被视为服务器上的实际变量.这也是为什么它抱怨,$1尽管你从未$在你的陈述中写过.
因此,字面语法不适用于预准备语句.
不要让println准备好的语句的字符串表示(结果)让您感到困惑 - 这不是服务器看到的内容.服务器在那里看到一个变量.
因此,您需要使用带有字符串的语法(可以是变量或文字)并将其转换为间隔.例如?::INTERVAL或CAST(? AS INTERVAL).
因此,这不是一个错误.
| 归档时间: |
|
| 查看次数: |
14594 次 |
| 最近记录: |