Подтвердить что ты не робот

Как я могу прервать транзакцию JDBC?

Есть ли способ преждевременно прервать транзакцию? Скажем, я отправил команду в базу данных, которая длится пять минут и после четырех, я хочу прервать ее.

Определяет ли JDBC способ отправки сигнала "остановить все, что вы делаете по этому соединению" в БД?

4b9b3361

Ответ 1

Как упоминалось james, Statement.cancel() отменит выполнение запускающего заявления (select, update и т.д.). В документах JDBC указано, что Statement.cancel() безопасен для запуска из другого потока и даже предлагает использовать вызов в потоке таймаута.

После отмены заявления вы все еще придерживаетесь задания по откату транзакции. Это не задокументировано как безопасное для запуска из другого потока. Connection.rollback() должен произойти в основном потоке, выполняющем все другие вызовы JDBC. Вы можете справиться с этим после того, как отмененный запрос Statement.execute...() завершится с помощью JDBCException (из-за отмены).

Ответ 2

Я угадываю, что вы хотите сделать, это не блокировать приложение при длительных запросах/транзакциях. С этой целью JDBC поддерживает концепцию тайм-аута запроса. Вы можете установить таймаут запроса, используя это:

java.sql.Statement.setQueryTimeout(seconds)

И обработайте метод SQLException, созданный методом execute(), отбросив транзакцию (конечно, это будет работать, только если у вас установлена ​​автозагрузка false, а ваш драйвер JDBC поддерживает Statement.cancel()).

Ответ 3

Отметьте Statement.cancel().

Ответ 4

Нет, вы не можете прервать его, используя стандартный JDBC.

Вы можете попытаться проверить, определяет ли ваша конкретная СУБД некоторое расширение, чтобы суппотировать его.