我在Postgres 9.3数据库中有一个表,其中有一个像这样的json列:
CREATE mytable (
mycolumn json
)
字符串
我想从一个Java应用程序执行查询,看起来像这样:
SELECT
mycolumn->>'somefield',
count(*)
FROM
mytable
GROUP BY
mycolumn->>'somefield'
型
当我尝试像这样使用PreparedStatement时:
SELECT
mycolumn->>?,
count(*)
FROM
mytable
GROUP BY
mycolumn->>?
型
我得到以下错误:
PSQLException: ERROR: column "mytable.mycolumn" must appear in the GROUP BY clause or be used in an aggregate function
型
这是有道理的,因为Postgres不能保证两个位置参数是相同的。
使用psql,我可以准备这样的语句:
PREPARE mystatement AS
SELECT
mycolumn->>$1,
count(*)
FROM
mytable
GROUP BY
mycolumn->>$1
型
可以用JDBC实现吗?
2条答案
按热度按时间lskq00tm1#
不这不可能JDBC只有位置参数,因此PostgreSQL驱动程序将其呈现为:
字符串
由于
$1
的值不一定与$2
相同,PostgreSQL的解析器将拒绝它,因为您可能没有在同一列上分组。解决办法可能是:
型
ecfsfe2w2#
CTEs将所有参数都放在第一行(就像穷人的函数定义),并在查询本身中通过名称访问它们,从而使Mark的解决方案更具可读性:
字符串