簡體   English   中英

JOOQ SQL給出1個參數但預期為0

[英]JOOQ SQL given 1 parameters but expected 0

我試圖找出如何使用NamedParameterJdbcTemplate JOOQ。 我已經成功創建了其他查詢,但我堅持創建一個包含WHERE子句的查詢。 當我嘗試運行下面的方法時,我得到錯誤org.springframework.dao.InvalidDataAccessApiUsageException:SQL [select“first_name”from“customer”,其中“id”= cast(?as integer)]:給定1個參數但預期為0

當我嘗試僅使用equals()中的整數時,我得到相同的錯誤,例如...... .where(fieldByName(“id”)。equal(1001),相同的錯誤和.where(fieldByName(“id”)。 (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(可能是3.1)可能會支持初始化您的DSLContext ,並設置為始終呈現命名參數。 這是在路線圖上注冊為功能請求:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM