当我使用 Spring JDBC 的 MappingSqlQuery 功能时,我无法为 IN 条件声明参数。我正在使用 Oracle 数据库。
我尝试使用 INTEGER
和 ARRAY
但没有结果。
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.SqlParameter;
import org.springframework.jdbc.object.MappingSqlQuery;
import org.springframework.stereotype.Component;
import javax.sql.DataSource;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import java.util.List;
@Component
public class TestQuery extends MappingSqlQuery<List<Object>> {
@Autowired
public TestQuery(DataSource ds) {
super(ds, "SELECT test_id, name FROM test_table WHERE test_id IN (?)");
/////////////////////////////////
// What sql type to declare here?
declareParameter(new SqlParameter(Types.));
/////////////////////////////////
compile();
}
@Override
protected List<Object> mapRow(ResultSet rs, int i) throws SQLException {
// ...
return null;
}
}
我想按如下方式使用这个 TestQuery 类的对象:
...
@Autowired
private TestQuery testQuery;
public List<Object> ...() {
List<Integer> ids = Arrays.asList(36006122, 36004367);
List<Object> objects = testQuery.findObject(ids);
return objects;
}
...
我能找到的唯一信息在这里:http://docs.spring.io/spring/docs/current/spring-framework-reference/html/jdbc.html#jdbc-in-clause
问题是他们没有在那里声明参数,而需要它才能使用 MappingSqlQuery
功能:
org.springframework.dao.InvalidDataAccessApiUsageException:提供了 1 个参数,但在类中声明了 0 个参数
数据库类型:Oracle
Spring 版本:3.2.14.RELEASE
Oracle依赖版本:ojdbc7:12.1.0.1
编辑: 添加了 TestQuery 用法
与此同时,我通过放弃 MappingSqlQuery
并几乎使用它来修复它:https://stackoverflow.com/a/1327222/1019778结合 NamedParameterJdbcTemplate
。
最佳答案
类型 int
应该可以在这里工作。另外,如果你想传入一个 List
值,你可以这样做:
在 (:lst) 中的 some_column_name
。
然后你应该这样做以传递实际值:
query.setParameterList("lst", someJavaListOfValues);
关于java - 使用 MappingSqlQuery 时用于 IN 条件的 SQL 参数类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33282272/