gpt4 book ai didi

java - JOOQ SQL给定1个参数但预期为0

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:29:33 26 4
gpt4 key购买 nike

我正在尝试弄清楚如何将 JOOQ 与 NamedParameterJdbcTemplate 一起使用。我已经成功创建了其他查询,但我一直坚持创建包含 WHERE 子句的查询。当我尝试运行下面的方法时,出现错误 org.springframework.dao.InvalidDataAccessApiUsageException: SQL [select "first_name"from "customer"where "id"= cast(? as integer)]: given 1 parameters但预期为 0

当我尝试在 equals() 中仅使用整数时,我遇到了同样的错误,例如....where(fieldByName("id").equal(1001),同样的错误和 .where(fieldByName("id").equal(id),同样的错误。

如果我删除 WHERE 子句,查询本身似乎工作正常。

我在这里做错了什么?在我看来,SQL 语法是正确的。这可能是我愚蠢,但我真的找不到这里出了什么问题。请帮忙!

public String getCustomerFirstName(int id) {
Query query = create.select(fieldByName("first_name"))
.from(tableByName("customer"))
.where(fieldByName("id").equal(param("id", id)));
Param param = query.getParam("id");
SqlParameterSource namedParameters = new MapSqlParameterSource(param.getName(), id);
return this.getNamedParameterJdbcTemplate().queryForObject(query.getSQL(), namedParameters, String.class);
}

最佳答案

为了让 jOOQ 生成命名参数,您必须明确告诉它这样做。

在你的情况下,这将使

String sql = create.renderNamedParams(query);

以上将替换您对

的调用
query.getSQL();

请注意,这里记录了这一点:

http://www.jooq.org/doc/3.0/manual/sql-building/bind-values/named-parameters

jOOQ 的 future 版本(可能是 3.1)可能会支持初始化您的 DSLContext,并设置为始终按原样呈现命名参数。这在路线图上注册为功能请求:

https://github.com/jOOQ/jOOQ/issues/2414

关于java - JOOQ SQL给定1个参数但预期为0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16240749/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com