【发布时间】:2015-09-11 14:46:57
【问题描述】:
我们有一个由 Jdbi (org.skife.jdbi.v2) 执行的 SQL 语句。对于绑定参数我们使用Jdbi的bind方法:
Handle handle = ...
Query<Map<String, Object>> sqlQuery = handle.createQuery(query);
sqlQuery.bind(...)
但是,我们在列表中遇到了问题,目前我们正在为此使用String.format。所以我们的查询可以是这样的:
SELECT DISTINCT
tableOne.columnOne,
tableTwo.columnTwo,
tableTwo.columnThree
FROM tableOne
JOIN tableTwo
ON tableOne.columnOne = tableTwo.columnOne
WHERE tableTwo.columnTwo = :parameterOne
AND tableTwo.columnThree IN (%s)
%s 被 String.format 替换,所以我们必须在 java 代码中生成一个正确的字符串。然后在所有%s被替换之后,我们使用jdbi的bind方法来替换所有其他参数(:parameterOne或?)。
有没有办法用 jdbi 替换String.format?有一个方法 bind(String, Object) 但默认情况下它不处理列表/数组。我找到了this article,它解释了如何编写我们自己的工厂来绑定自定义对象,但这看起来需要付出很多努力,尤其是对于应该已经支持的东西。
【问题讨论】: