Отменить длительные запросы в HSQLDB/JDBC

У нас есть большое количество длительных SQL-запросов, и мы хотели бы иметь возможность отменить их выполнение. Пока что я использую ExecutorCompletionService для выполнения запросов, что хорошо работает для отмены запросов, которые еще не запущены.

Моя проблема: я хотел бы также жестко отменить текущие запросы. Метод java.sql.Statement.cancel() не работает с HSQLDB. Из документа по Java: "Отменяет это заявление объект, если и СУБД, и драйвер поддерживают прерывание оператора SQL». Я предполагаю, что HSQLDB не поддерживает отмену.

Кто-нибудь знает, как отменить оператор (возможно, некрасивым, но все же приемлемым способом)?


person user3726374    schedule 19.08.2014    source источник


Ответы (2)


См. https://sourceforge.net/p/hsqldb/bugs/1436/ для рабочее решение.

Короткий вариант:

Используйте новейшую версию SVN HSQLDB или 2.3.4 Final для сервера.

Если текущий запрос, который вы хотите отменить, использует соединение hsqldb, создайте новое соединение с правами администратора на тот же сервер.

Использовать

select * from information_schema.system_sessions

чтобы найти сеанс с искомым утверждением.

Использовать

ALTER SESSION <SESSIONNUMBER> RELEASE

отменить Заявление.

Закройте соединение.

person Christian Bender    schedule 11.05.2016

Для меня рабочая команда sql была ALTER SESSION <SESSIONNUMBER> END STATEMENT

person ray_ray_ray    schedule 05.02.2021