You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JDBI绑定元组列表:bindMethodsList/bindBeanList抛UnableToCreateStatementException

问题排查与解决

错误原因

调用bindMethodsList和bindBeanList时,错误地将多个方法名/字段名合并成单个字符串传入List.of(),导致JDBI无法识别正确的方法或字段。比如List.of("getAuthorId, getBookId")实际是仅包含一个元素的列表,JDBI会尝试查找名为getAuthorId, getBookId的方法,自然找不到,从而抛出异常。

修正方案

1. 修正bindMethodsList调用

将方法名拆分为列表的独立元素:

List<AuthorBooks> allAuthorBooks = Arrays.asList(new AuthorBooks(4394, 9977));
handler.createUpdate("DELETE FROM TABLE WHERE (author_id, book_id)" 
                + " IS NOT IN (<allAuthorBooks>)")
      .bindMethodsList("allAuthorBooks", allAuthorBooks, List.of("getAuthorId", "getBookId"))
      .execute();

2. 修正bindBeanList调用

同理,将字段名拆分为列表的独立元素:

List<AuthorBooks> allAuthorBooks = Arrays.asList(new AuthorBooks(4394, 9977));
handler.createUpdate("DELETE FROM TABLE WHERE (author_id, book_id)" 
                + " IS NOT IN (<allAuthorBooks>)")
      .bindBeanList("allAuthorBooks", allAuthorBooks, List.of("authorId", "bookId"))
      .execute();

额外说明

确保使用的数据库支持(col1, col2) IN (...)语法(如MySQL 5.7+、PostgreSQL等),若数据库版本较低可能需要调整SQL写法,但当前异常的核心原因是参数绑定的列表格式错误,修正后即可解决。

内容的提问来源于stack exchange,提问作者EzyHoo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 09:14:59