Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to generate a dynamic "in (...)" sql list through Spring JdbcTemplate?

Tags:

spring

Is it possible to generate arbitrary "in ()" lists in a SQL query through Jdbc template:

example:

"select * from t where c in (#)" , However '#' could be an arbitrary list of values only known at runtime.

like image 706
wsb3383 Avatar asked Dec 30 '09 18:12

wsb3383


1 Answers

Yes, it's possible in Spring if you use NamedParameterJdbcTemplate or SimpleJdbcTemplate with named parameters. List parameter can be set as a java.util.List:

List<String> list = new ArrayList<String>();

list.add("A");
list.add("B");
list.add("C");

List<SomeObject> result = simpleJdbcTemplate.query("SELECT * FROM t WHERE c in (:list)",
    new RowMapper<SomeObject>() { ... },
    Collections.singletonMap("list", list));

In this case Spring internally creates the SQL query with the required number of placeholders based on the size of the actual list when replacing named parameters with ?s.

like image 167
axtavt Avatar answered Oct 15 '22 17:10

axtavt