如何在spring jdbc中使用数组
Posted
技术标签:
【中文标题】如何在spring jdbc中使用数组【英文标题】:How to use array in spring jdbc 【发布时间】:2016-12-15 08:42:57 【问题描述】:我正在使用弹簧 jdbc 。我的 sql 查询涉及“IN”子句,我动态创建“?”基于输入并通过 spring jdbc模板查询方法的对象数组。
public List<Student> getStudentName(String studentId)
//studentId contains number of ids sepeated by comma.
Object [] params= new Object[]studentId.split(",")
Stream<String> stream= Arrays.stream(studentId.split(","));
final String stInClauseParameters= stream.map(studentId -> "?").collect((Collectors.joining(",")));
StringBuilder sql = new StringBuilder();
sql.append(" select studentName from Student where student_id IN ("+stInClauseParameters+")")
return JdbcTemplate.query(sql.toString(),params, new BeanPropertyRowMapper(Student.class))
错误
Prepared Statement: Input parameter not set, index: 1.; nested exception is java.sql.SQLException: JZ0SA: Prepared Statement: Input parameter not set, index: 1
spring jdbc查询方法中如何使用数组?
【问题讨论】:
【参考方案1】:更简单的方法是使用可以为您动态处理 in 子句的 NamedParameterJdbcTemplate。
一个例子是
public class StudentDao extends JdbcDaoSupport
public List<Student> getStudentName(String studentId)
List<String> studentIds = Arrays.asList(studentId.split(","));
String sql = "SELECT studentName FROM Student WHERE student_id IN (:ids)";
Map<String, List<String>> params = new HashMap<String, List<String>>();
params.put("ids", studentIds);
NamedParameterJdbcTemplate template = new NamedParameterJdbcTemplate(getDataSource());
return template.query(sql, params, new BeanPropertyRowMapper(Student.class));
【讨论】:
以上是关于如何在spring jdbc中使用数组的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Spring MVC 中使用 @Bean 连接到 jdbc?
如何使用 Guice 在 Spring JDBC 中使用事务
如何使用 JDBC 在 spring-session 中初始化模式