java使用jdbc模板在单个连接上使用参数执行多个查询
我需要在一个连接中通过jdbc模板执行多个查询。 我正在使用SQL server和mssql jdbc驱动程序。以下是问题:
IF OBJECT_ID('tempdb..#temp') IS NULL
SELECT * INTO #temp FROM ( SELECT * FROM "complex query here" ) a
DECLARE @page_size INT
SET @page_size = ?
SELECT *
FROM ( SELECT TOP(@page_size) * FROM #temp
WHERE custom_column > ?
ORDER BY custom_column ) inner_query
(MULTIPLE JOINES HERE)
ORDER BY custom_column
如果临时表不存在,查询只需将复杂查询的整个结果放入临时表,并从生成的临时表中选择页面。 由于临时表具有连接作用域,我需要在一个连接中使用多个查询来执行整个分页。这是我尝试过的代码:
try (Connection connection = dataSource.getConnection()) {
while (true) {
List<CustomObject> customObjects = customRepository.
.getCustomObjectsPage(connection, pageSize, minimumValueInWhere);
// business logic here..
if (customObjects.size() < pageSize) {
break;
}
minimumValueInWhere = customObjects.get(customObjects.size() - 1).getId().toString();
}
}
和getCustomObjectsPage():
public List<CustomObject> getCustomObjectsPage(Connection connection, int pageSize,
String parameter) {
JdbcTemplate singleConnectionJdbcTemplate = new JdbcTemplate(
new SingleConnectionDataSource(connection, true));
try {
return singleConnectionJdbcTemplate
.query("the query from above", new Object[]{pageSize, parameter},
JdbcTemplateMapperFactory.newInstance()
.newResultSetExtractor(CustomObject.class)); // the root entity.
}
}
但由于某些原因,查询不是在单个连接中执行的,如果我硬编码 将参数传递给查询,而不是将其传递给jdbc模板,这样可以完美地工作
如何使其独立于参数工作
共 (0) 个答案