我想让 JOOQ 用引号来呈现列名。这是我尝试过的,阅读文档和 StackOverflow:
DSLContext sql = DSL.using( SQLDialect.SQL99,
new Settings()
.withRenderNameStyle(RenderNameStyle.QUOTED)
.withRenderFormatted(true)
.withRenderKeywordStyle(RenderKeywordStyle.UPPER)
);
System.out.println( "Quoted: " + (sql.settings().getRenderNameStyle()==RenderNameStyle.QUOTED) );
Table<Record> table = table("MyTable");
Field<Long> lid = field("id",Long.class);
String sqlStr = sql.renderInlined(
sql.select( lid, field("type"), field("request.id"), field("UPPERCASE"), field("lowercase") )
.from(table)
.limit(1000)
);
System.out.println(sqlStr);
Run Code Online (Sandbox Code Playgroud)
生成的语句是:
SELECT
id,
type,
request.id,
UPPERCASE,
lowercase
FROM MyTable
LIMIT 1000
Run Code Online (Sandbox Code Playgroud)
它输出Quoted: true
,因此标志似乎已设置。虽然renderFormatted
并且renderKeywordStyle
似乎受到尊重,但 `renderNameStyle` 似乎被忽略了。
我正在试验一个不受支持的数据库,因此是 SQL99。附带问题:为什么 JOOQ 中不推荐使用 SQL99?
这些DSL.field(String)
方法用于将“纯 SQL”嵌入到 jOOQ 中。jOOQ 不会解析您的 SQL 字符串,因此不知道您认为哪些部分是“名称”,例如 type
、 或request
和id
。
如果您不想使用代码生成器,则应使用DSL.field(Name)
创建名称受RenderNameStyle
设置影响的字段。Name
可以使用创建DSL.name(String...)
我正在尝试使用不受支持的数据库,因此使用 SQL99。附带问题:为什么 JOOQ 中不推荐使用 SQL99?
因为这个名字有误导性。jOOQ 并没有真正生成 SQL99,因为没有集成测试来验证输出是否真正正确或根据标准有意义。在 jOOQ 的未来版本中,SQL99
将被DEFAULT
方言取代,该方言可能不适用于任何数据库。
归档时间: |
|
查看次数: |
805 次 |
最近记录: |