2011-08-10 49 views
3

使用的JdbcTemplate以我弹簧Hibernate应用程序我有在一个common_queries.xml文件中,其中一些查询需要如下图所示2到3个参数的所有SQL查询来查询如何通过多个值在弹簧

<query id="mining.fuel" no-of-params="2"> 
select ms.id id,ms.name value,concat(ms.name,' ',' (',ms.code,')') label,ms.rate rate  from mining_fuel ms where ms.name like '?' and ms.fuel_type_id=? LIMIT 10 
</query> 

在我daoImpl我得到这个查询

lookupList = jdbcTemplate.queryForList(q1.getQuery()); 

我将在这里得到了查询,但如何通过的“?”的价值在这儿,我有那些2倍的值与我daoImpl .. PL发送的代码如何实现这一点。我不想使用准备好的声明。

回答

3

使用this overload它接受一个对象可变参数用于使查询参数:

lookupList = jdbcTemplate.queryForList(q1.getQuery(), value1, value2, value3); 
+0

嗯,我试过我有2个值,如(q1.getQuery(), lookupValue,filterType);但是当我硬编码lookupValue和只传递一个参数filterType它的工作正常,但是当我做它反转它的引发java.sql.SQLException:没有参数定义在pr epareCall()和当我通过两个值抛出java.sql.SQLException:参数索引超出界限。 2不在1和1的有效值之间。在上面提到的'like'附近的选择查询有什么问题吗? – Anupama

+1

尝试删除第一个'?'周围的引号:'like?'。 –

+0

实际上我想使用(如'?%')但如果我删除单引号(如?%)其显示sql语法异常..如果我用引号其showin参数越界异常。 – Anupama

0

首先调用的JdbcTemplate参考的queryForList方法,并传递查询和对象类型的阵列在该对象类型的阵列我们必须通过只对象装置如果我们有id,它是int类型,我们必须将对象类型转换为对象类型。

lookupList = jdbcTemplate.queryForList(q1.getQuery,新的对象[] {指定,新的整数(ID),新的浮动(SAL)}

4

我想你只需要创建与所述对象阵列请记住,该命令是重要的,因为value1将是第一个替换为?在查询中。

lookupList = jdbcTemplate.queryForList(q1.getQuery(), new Object[]{value1, value2, value3});