如何将in-params及其出现设置为jdbcTemplate查询函数?

时间:2019-01-14 10:50:19

标签: java spring jdbctemplate

我试图执行一个大型SQL查询,其中可能包含几个相同的IN参数,例如{arg1,arg2,arg1,arg1,arg2}。使用jdbcTemplate可以执行以下查询:

jdbcTemaplate.query(sqlQuery, new Object[] {arg1, arg2, arg1, arg1, arg2}, rowMap);

但是在某些查询中,参数的数量可能很大,因此,编写类似{arg,arg1,arg1,arg2,arg1,arg1,arg1,...}的类似参数看起来很糟糕。有什么方法可以为每个参数定义事件发生索引集并将其发送到jdbcTemplate的查询函数吗?例如,

 ParamsOccurrences[] paramsOccurrences = {
     new ParamsOccurrences(arg1, new int[] { 1, 4, 5, 6 }),
     new ParamsOccurrences(arg2, new int[] { 2, 3 }) };

 jdbcTemplate.query(sqlQuery, paramsOccurrences, rowMap);

我正在使用Oracle DB。

1 个答案:

答案 0 :(得分:0)

我找到了适合我的解决方案。简单的方法是在jdbcTemplate的查询功能中使用 PreparedStatementSetter 参数。示例:

jdbcTemplate.query(sqlQuery, new PreparedStatementSetter() {
                public void setValues(PreparedStatement preparedStatement) throws SQLException {                    
                 preparedStatement.setObject(1, arg1); //example for arg1
                 preparedStatement.setObject(2, arg1);
                 ... //inside this method I just process every argument by setting specific numbers of occurrences in cycle
                }
            }, rowMap);