【问题标题】:How to bind variables to conditional statement when using jOOQ to build SQL?使用jOOQ构建SQL时如何将变量绑定到条件语句?
【发布时间】:2019-01-24 03:10:54
【问题描述】:

我正在使用 jOOQ-3.11.9 来构建 SQL。以下是我的代码:

String sql = DSL.using(SQLDialect.MYSQL)
        .select(DSL.asterisk())
        .from(table("service"))
        .where("name = ?", "service1")
        .getSQL();

我期待的是

select * from service where (name = "service1")

但结果是

select * from service where (name = ?)

我的代码有什么问题吗?

【问题讨论】:

标签: java mysql jooq


【解决方案1】:

这按预期工作。默认Settings.statementType值是StatementType.PREPARED_STATEMENT,所以jOOQ默认会在你的SQL字符串中生成绑定值占位符,可以在其他工具中执行,比如JDBC、Spring等。

您可以将ParamType.INLINE 值传递给getSQL() 方法,或指定Settings.withStatementType(StatementType.STATIC_STATEMENT)

更多细节请参考 Javadoc 中的解释: https://www.jooq.org/javadoc/latest/org/jooq/Query.html#getSQL--

【讨论】:

    【解决方案2】:

    您应该使用 jOOQ 生成的类中的字段名称:

    String sql = DSL.using(SQLDialect.MYSQL)
        .select(DSL.asterisk())
        .from(YOURENTITY)
        .where(YOURENTITY.NAME.eq(nameParam))
        .getSQL();
    

    YOURENTITY 应该是您项目中 jOOQ 生成的类。 nameParam 将是传递给包装上述查询的方法的参数。

    jOOQ 有很多很好的文档,里面有很多例子: https://www.jooq.org/doc/3.11/manual/sql-building/sql-statements/select-statement/where-clause/

    【讨论】:

    猜你喜欢
    • 2016-03-22
    • 1970-01-01
    • 2013-03-13
    • 1970-01-01
    • 2012-05-22
    • 2019-02-05
    • 2011-01-08
    • 2021-03-14
    • 2019-04-27
    相关资源
    最近更新 更多