当前位置: 首页 > 知识库问答 >
问题:

jooq-query不带引号

东门修文
2023-03-14

我使用Jooq-3.1.0在Spring-4中为Oracle和Postgresql生成和执行动态查询。在一个场景中,我有一个分区表,我需要使用JOOQ查询它。我使用dsl.tablebyname(vblTablename);,其中vblTablename是在查询生成方法中作为字符串接收的字符串,例如vbl_default分区(p_04-Dec-14)。(vbltableName模式对于不同的数据库不同,并且在外部属性文件中配置)。JOOQ生成sql,但在表名周围使用双引号。如下所示的查询和错误

查询

SELECT COUNT(ID) COUNT FROM "vbl_default partition(p_04-Dec-14)" 
    where (rts between timestamp '2014-12-04 00:00:00.0' and timestamp '2014-12-05 00:00:00.0' and userid in (2))
ORA-00972: identifier is too long
00972. 00000 -  "identifier is too long"
*Cause:    An identifier with more than 30 characters was specified.
*Action:   Specify at most 30 characters.
Error at Line: 4 Column: 29
Settings settings = new Settings();
        settings.setRenderNameStyle(RenderNameStyle.AS_IS);

共有1个答案

淳于新
2023-03-14

dsl.tablebyname(string...)背后的思想是提供一个表...by name:-)

您正在通过dsl.table(String)查找一个普通的SQL表。

你可以写:

// Assuming this import
import static org.jooq.impl.DSL.*;

DSL.using(configuration)
   .select(count(VBL_DEFAULT.ID))
   .from(table("vbl_default partition(p_04-Dec-14)"))
   .where(...);
DSL.using(configuration)
   .select(count(VBL_DEFAULT.ID))
   .from("vbl_default partition(p_04-Dec-14)")
   .where(...);
// Beware of the risk of SQL injection, though!
public <R extends Record> Table<R> partition(Table<R> table, String partition) {
    return DSL.table("{0} partition(" + partition + ")", table);
}

...然后:

DSL.using(configuration)
   .select(count(VBL_DEFAULT.ID))
   .from(partition(VBL_DEFAULT, "p_04-Dec-14"))
   .where(...);
 类似资料:
  • 我将springBoot与JOOQ一起使用,并希望记录生成的SQL。 我将slf4J添加到maven依赖项和log4j.xml中,就像在JOOQ文档中一样(http://www.JOOQ.org/doc/latest/manual/sql-execution/logging/)。但是当jooq执行一些查询时,我在控制台中看不到任何日志。

  • 问题内容: 之间有什么区别 和 我都尝试过,但似乎都可以,但是我是在问,以防万一我需要小心(例如,%以外的单位等)。 问题答案: 这完全是关于HTML标记的真实有效性。这是W3C(WWW联盟)的工作目的。许多事情可能都在HTML中起作用,但是必须进行验证才能被网络浏览器更仔细地识别。您甚至可以在开头和结尾处省略and 标记,但是完全不建议这样做,没有人这样做,它被视为“错误代码”。 因此,将它们放

  • 我找不到关于如何动态构造with子句的留档。jOOQ中常见的表表达式/CTE)。我的用例是这样的: 我需要嵌套动态创建的列,以便从这些动态创建的列中生成新数据 例如,我正在创建一个新字段,它是完全外部联接的非空结果。此字段仅在查询执行时可用,因此我需要将其存储在WITH子句中,以便在其他查询中引用它以进行其他计算 理想情况下,我可以动态地请求WITH子句类型的查询,通过将这个连接的数据集放在它自己

  • 我试图在CrudRepository中创建一个方法,它将能够给出用户列表,这些用户的用户名就像输入参数一样(不仅以它开头,而且包含它)。我尝试使用方法,但正如Spring文档中所述,该方法等于“”。这对我不利,因为我已经告诉我,我正在尝试获取所有用户的用户名包含...

  • 我遇到了jOOQ不插入实体的问题,除非存储库用@Transactional注释。 这是我的配置: 存储库: 因此,调用userRepository。插入(…) 实际上并没有插入到数据库中,尽管日志显示以下内容: 但是,如果我重载User道的插入方法并用@Transacational-it works注释它,实际上会插入行。我想我配置错误了一些东西。 使用带有jOOQ启动启动器的Spring Boo

  • 因此,我希望使用将一些记录懒洋洋地取入POJOs,如下所示: 我当然可以做以下事情,但感觉不对: 谢了!