PreparedStatement - 不绑定所有参数

时间:2010-11-25 08:15:27

标签: java spring spring-jdbc

我正在使用Spring-JDBC来执行SQL并获取结果。

 SELECT 
       SUM(spend) total_sum   
    FROM TABLE_NAME  
       WHERE   
       sup_id = ?  AND    
      ( ( YEAR = ? AND period IN ( ? ) )   OR     
      ( YEAR = ? AND period IN(?)))

绑定变量传递为:

final Object[] paramMap = { "1234", "2010",
                "'01_JAN','02_FEB','03_MAR'", "2009", "'11_NOV','12_DEC'" };

final List<LeadTimeDto> query = getJdbcTemplate().query(sql, paramMap,
                new RowMapper<LeadTimeDto>() {
                    @Override
                    public LeadTimeDto mapRow(final ResultSet resultSet,
                            final int arg1) throws SQLException {
                        final LeadTimeDto leadTimeDto = new LeadTimeDto();
                        final String string = resultSet.getString("total_sum");
                        System.out.println("ltime = " + string);
                        leadTimeDto.setLeadTime(string);
                        return leadTimeDto;
                    }
                });

我不确定这里发生了什么。我遇到了THIRD参数绑定的问题。 如果我在查询本身中写下第三个参数的值,如下所示它正在工作。

 SELECT 
       SUM(spend) total_sum   
    FROM TABLE_NAME  
       WHERE   
       sup_id = ?  AND    
      ( ( YEAR = ? AND period IN ( '01_JAN','02_FEB','03_MAR' ) )   OR     
      ( YEAR = ? AND period IN(?)))

如果是引号(')的问题,那么第五个参数也应该是问题。但它具有约束力。

我尝试过使用getNamedParameterJdbcTemplate()以及Map和Bean,但没有运气。

1 个答案:

答案 0 :(得分:2)

据我所知,对IN子句使用预准备语句参数是不合法的。 请参阅以下文章,其中介绍了一些替代方案:

http://www.javaranch.com/journal/200510/Journal200510.jsp#a2