如何在JOOQ中新增列?常量列值异常及SQL生成问题
问题解决方案
1. newField返回行号而非100的解决办法
你的JOOQ查询逻辑本身没有问题,出现行号大概率是读取结果时的操作错误。比如误将Record的索引位置值当成了newField的值,或者用了错误的字段获取方式。正确读取newField的方式是通过字段名精准获取:
for (Record record : r) { Integer newField = record.get("newField", Integer.class); System.out.println(newField); }
如果是使用JOOQ代码生成器生成了表模型(推荐做法),还可以用类型安全的字段引用读取:
// 假设已生成Author表模型类 Integer newField = record.value(Author.NEW_FIELD);
2. 让生成的SQL直接显示100而非占位符?
你当前使用的DSL.val(100)会触发JOOQ的参数绑定机制(预编译SQL),若要将值直接嵌入SQL生成静态语句,改用DSL.inline(100)即可。修改后的完整代码:
Result<Record> r = create.select(DSL.asterisk(), DSL.inline(100).as("newField")) .from(DSL.table("author")) .fetch();
此时生成的SQL会完全符合预期:
select *, 100 as "newField" from author
如果使用JOOQ代码生成器,代码可进一步优化为类型安全版本:
// 假设已生成Author表模型 Result<Record> r = create.select(Author.AUTHOR.asterisk(), DSL.inline(100).as("newField")) .from(Author.AUTHOR) .fetch();
内容的提问来源于stack exchange,提问作者Takis
相关产品推荐
相关产品推荐

