[英]java.sql.SQLException: Wrong number of parameters: expected 0, was given 5 Query:
[英]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
,並設置為始終呈現命名參數。 這是在路線圖上注冊為功能請求:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.