gpt4 book ai didi

Java Spring : What is best way to do a mysql query using an IN clause using JdbcTemplates?

转载 作者:行者123 更新时间:2023-11-29 04:11:01 25 4
gpt4 key购买 nike

如果我在引号中有一堆东西,我发现自己在做类似的事情:

String sql = "SELECT col1, col2, col3 "
+ "FROM my_awesome_table "
+ "WHERE strValue IN (%s)";

sql = String.format(sql, COMMA_JOINER.join(Iterables.transform(strValues,
new Function<String, String>() {
@Override
public String apply(String input) {
return "'" + input.replaceAll("'", "''") + "'";
}
})));

List<ResultObject> resultObjects =
getSimpleJdbcTemplate().query(sql, resultObjectRowMapper());

但我必须构建自己的 IN 子句,用单引号将字符串括起来,然后自己转义它们,这似乎很奇怪。必须有更好的方法!一些额外的上下文:我不希望查询太多(最多几十行或几百行),只要我们不一次查询一行,优化就不是太重要了!

最佳答案

首先,即使没有 JdbcTemplate,您也应该使用准备好的语句,从而让 JDBC 驱动程序为您转义引号。 SQL 查询类似于

select ... where strValue in (?, ?, ?, ?)

您将使用 PreparedStatement.setParameter() 绑定(bind)每个参数,无需转义任何内容。

NamedParameterJdbcTemplate ,它更容易,因为 Spring 允许对整个字符串集合使用单个参数。 Spring documentation 中解释了它的用法。 :

String sql = "select ... from ... where strValue in :listOfValues";
Map namedParameters = Collections.singletonMap("listOfValues", strValues);
...

关于Java Spring : What is best way to do a mysql query using an IN clause using JdbcTemplates?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11128441/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com