gpt4 book ai didi

postgresql - Postgres JDBC 编号参数

转载 作者:行者123 更新时间:2023-11-29 12:20:37 24 4
gpt4 key购买 nike

我在 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 做到这一点吗?

最佳答案

不,这是不可能的。 JDBC 只有位置参数,因此 PostgreSQL 驱动程序会将其呈现为:

PREPARE mystatement AS
SELECT
mycolumn->>$1,
count(*)
FROM
mytable
GROUP BY
mycolumn->>$2

由于 $1 的值不一定与 $2 相同,PostgreSQL 的解析器将拒绝它,因为您可能没有在同一列上分组。

解决方案可能是:

SELECT a.aColumnLabel, count(*)
FROM (
SELECT mycolumn->>? as aColumnLabel
FROM mytable
) a
GROUP BY a.aColumnLabel

关于postgresql - Postgres JDBC 编号参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26944279/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com