我想弄清楚如何使用JOOQ與NamedParameterJdbcTemplate。我已成功創建其他查詢,但我堅持創建一個包含WHERE子句的查詢。當我嘗試運行下面的方法時,出現錯誤org.springframework.dao.InvalidDataAccessApiUsageException:SQL [從「customer」中選擇「first_name」,其中「id」= cast(?as integer)]:給定1個參數,但預期0JOOQ SQL給出1參數,但預計0
當我嘗試在equals()中只使用整數時,得到相同的錯誤,如... .where(fieldByName(「id」)。equal(1001),same error and .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);
}
太棒了!我實際上閱讀了本教程的「命名參數」部分,但顯然我誤解了renderNamedParams()方法的概念。我的錯。一切工作正常,現在漂亮!謝謝你,盧卡斯! – Roger 2013-04-27 06:36:16
@Roger:是的,它可能有點混亂。命名參數當前通過此方法顯式呈現,因爲jOOQ無法執行查詢,否則(通過JDBC)。事實上,我並沒有太多有關Spring Data及其命名參數支持的經驗。如果您在jOOQ中看到了API優化的一些潛力(例如更輕鬆地提取SQL和參數名稱/值映射),請隨時在用戶組上指定功能請求。 – 2013-04-27 09:00:29