gpt4 book ai didi

java - 如何使jOOQ引用保留关键字的表名?

转载 作者:搜寻专家 更新时间:2023-11-01 03:17:46 25 4
gpt4 key购买 nike

从名为 user 的表中进行选择使用 jOOQ 我得到以下异常:

jOOQ; bad SQL grammar [insert into user (user_id, account_type) values (?, ?)]; nested exception is org.postgresql.util.PSQLException: ERROR: syntax error at or near "user"

我的 jOOQ 设置是:

private static final Settings jooqSettings = new Settings()
.withRenderSchema(false)
.withRenderNameStyle(RenderNameStyle.LOWER);

我创建了一个 DSLContext从中构建事务中的查询,如下所示:

ctx.insertInto(USER)
.set(USER.USER_ID, userId)
.set(USER.ACCOUNT_TYPE, "U")
.execute()

USER导入为 <jooq-generated-package>.tables.USER .

jOOQ 是否有配置属性来转义表名(全部或仅保留关键字)?我在文档或源代码中找不到任何内容。

最佳答案

好吧,您通过设置 RenderNameStyle.LOWER 关闭了引用...这就是它的工作原理:)

通过删除该设置或将其设置为 RenderNameStyle.QUOTED,jOOQ 将在所有标识符周围生成这些双引号。

来自specification :

<simpleType name="RenderNameStyle">
<restriction base="string">
<!--
Render object names quoted, as defined in the database. Use this
to stay on the safe side with case-sensitivity and special
characters. For instance:
Oracle : "SYS"."ALL_TAB_COLS"
MySQL : `information_schema`.`TABLES`
SQL Server: [INFORMATION_SCHEMA].[TABLES]
-->
<enumeration value="QUOTED"/>

<!--
Render object names, as defined in the database. For instance:
Oracle : SYS.ALL_TAB_COLS
MySQL : information_schema.TABLES
SQL Server: INFORMATION_SCHEMA.TABLES
-->
<enumeration value="AS_IS"/>

<!--
Force rendering object names in lower case. For instance:
Oracle : sys.all_tab_cols
MySQL : information_schema.tables
SQL Server: information_schema.tables
-->
<enumeration value="LOWER"/>

<!--
Force rendering object names in upper case. For instance:
Oracle : SYS.ALL_TAB_COLS
MySQL : INFORMATION_SCHEMA.TABLES
SQL Server: INFORMATION_SCHEMA.TABLES
-->
<enumeration value="UPPER"/>
</restriction>
</simpleType>

请注意,有向 Javadoc ( #2830 ) 和手册 ( #5231 ) 添加更多文档的功能请求

关于java - 如何使jOOQ引用保留关键字的表名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42438463/

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