MySQL запрос с состоянием, показывающим «Отправка данных» или «Запись в сеть», не может быть отменен с помощью метода Statement.cancel () - PullRequest
0 голосов
/ 10 мая 2019

Я делаю MySQL-запрос, объединяющий две большие таблицы без on фильтра условий, такие как select * from a,b.

Я нажимаю show processlist команду и показываю, что состояние sql Sending data, затем я вызываю свой код statement.cancel().

Интересно, запрос был убит, но я ошибаюсь, запрос все еще находится в состоянии Sending data. Я заметил, что реализация mysql выполняет следующий код

if (!this.statementExecuting.get()) { return; }

может ли кто-нибудь иметь другой способ отменить такие запросы? очень ценю.

1 Ответ

0 голосов
/ 10 мая 2019

Вы пытались прервать поток, который ожидает завершения выполнения запроса?

Я предполагаю, что вы запускаете несколько потоков, поскольку вы можете вызвать statement.cancel() во время выполнения оператора. Таким образом, вы должны иметь возможность получить ссылку на этот поток и вызвать thread.interrupt() на нем.

Не уверен, как драйвер JDBC будет обрабатывать InterruptedException - возможно, вам придется позаботиться об этом в своем коде.

...