有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案