Выполнить несколько запросов с параметрами на одном соединении, используя шаблон jdb c - PullRequest
1 голос
/ 18 марта 2020

Мне нужно выполнить несколько запросов через шаблон jdb c в одном соединении. Я использую SQL сервер с драйвером ms sql jdb c. Вот запрос:

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.
    } 
  }

Но по некоторым причинам запросы не выполняются в одном соединении, и если я жестко закодировал параметры в запрос, вместо передачи их в шаблон jdb c, он отлично работает.

Как заставить это работать независимо от параметров?

...