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
相关产品推荐
相关产品推荐

