我正在使用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 = ?)
我的代码有什么问题吗?
答案 0 :(得分:0)
您应该使用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/
答案 1 :(得分:0)
这按预期工作。默认的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--