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

Java中如何将逗号分隔字符串转换为多值传入SQL WHERE IN子句

解决方案

你需要先将逗号分隔的字符串拆分为清理后的字符串集合,再将集合直接绑定到IN子句的命名参数即可,大部分Java持久层框架(如Spring JDBC)原生支持集合类型的命名参数展开,无需手动拼接SQL。

第一步:处理输入字符串

拆分字符串时要同时处理逗号前后的空格、过滤空值,避免无效参数传入:

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

// 拆分并清理逗号分隔的水果字符串
List<String> fruitList = Arrays.stream(inputParameters.getFruit().split(",\\s*"))
        .map(String::trim)
        // 过滤掉空字符串,处理输入首尾有逗号、连续逗号的异常场景
        .filter(fruit -> !fruit.isBlank())
        // 可选:增加去重逻辑,避免重复参数
        .distinct()
        .collect(Collectors.toList());

第二步:修改SQL拼接与参数绑定逻辑

注意原代码存在SQL语法隐患:当没有fruit参数时,WHERE关键字后没有条件会报错,建议加1=1作为占位条件:

StringBuilder sql = new StringBuilder("SELECT * FROM fruit f where 1=1 ");

if (!fruitList.isEmpty()) {
    sql.append("AND f.name IN (:fruit) ");
    // 直接传入处理好的集合,框架会自动将:fruit展开为对应数量的?占位符
    parameterSource.addValue("fruit", fruitList);
}

注意事项

不要手动将拆分后的字符串拼接进SQL语句,会存在SQL注入风险,通过参数源绑定集合的方式是安全方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 00:54:02