如何使用 JDBC 更改 Postgres Enum 类型

问题描述 投票:0回答:1

我尝试向 postgres 枚举类型添加值,如下所示(删除值的循环):

      PreparedStatement stmt = conn.prepareStatement("ALTER TYPE my_enum_type ADD VALUE ?;");
      
      stmt.setString(1, "value");
      stmt.addBatch();
      stmt.executeBatch()
            

当我运行时,我得到:

Batch entry 0 ALTER TYPE my_enum_type ADD VALUE 'value' was aborted: ERROR: syntax error at or near "$1"

谷歌搜索我发现这可能与选角有关。我将查询更改为:

ALTER TYPE my_enum_type ADD VALUE ?::my_enum_type

它给出了同样的错误。

ALTER TYPE my_enum_type ADD VALUE cast(? as my_enum_type)

它因语法错误而失败

cast

我通过将字符串与枚举值连接并执行来解决这个问题,但必须有更好的方法。

我是 postgres 新手,有没有简单的方法来解决这个问题?

编辑: 回应评论并避免混淆:

  1. 如何让 Java 和 Postgres 枚举一起进行更新? 是关于执行更新而不是 ALTER。解决方案是转换为目标类型,我尝试过但没有成功。
java postgresql jdbc
1个回答
3
投票

语句中的参数只能与

INSERT
SELECT
UPDATE
DELETE
VALUES
一起使用,但不能与
ALTER TYPE
一起使用。

您必须自己构建查询字符串。为了避免 SQL 注入,请使用内置方法正确引用字符串:

org.postgresql.PGConnection pgconn = conn.unwrap(org.postgresql.PGConnection.class);

String query = "ALTER TYPE my_enum_type ADD VALUE " || pgconn.escapeLiteral("value");

conn.createStatement().executeUpdate(query);
© www.soinside.com 2019 - 2024. All rights reserved.