2008-11-17 18 views

Respuesta

28

Como lo menciona james, Statement.cancel() cancelará la ejecución de un Statement en ejecución (seleccionar, actualizar, etc.). Los documentos de JDBC dicen específicamente que Statement.cancel() es seguro para ejecutar desde otro subproceso e incluso sugiere el uso de llamarlo en un subproceso de tiempo de espera.

Después de cancelar la instrucción, todavía está atascado con el trabajo de deshacer la transacción. Eso es no documentado como seguro para ejecutar desde otro hilo. El Connection.rollback() debería pasar en el hilo principal haciendo todas las otras llamadas JDBC. Puede manejar eso después de que la llamada cancelada Statement.execute ...() finalice con una JDBCException (debido a la cancelación).

+1

Aquí hay un comportamiento específico de Oracle al llamar a 'Statement.cancel()': http://stackoverflow.com/a/659063/603516 – Vadzim

-5

No, no puede cancelarlo utilizando JDBC estándar.

Puede intentar comprobar si su RDBMS particular define alguna extensión para suplirla.

+4

He tenido vendedores que me dicen esto. Si un controlador JDBC en particular no implementa Statement.cancel(), ese es un problema de calidad de implementación. Está allí y documentado para ese caso de uso. –

12

Supongo que lo que quiere hacer es evitar el bloqueo de su aplicación en consultas/transacciones de larga ejecución. Con este fin, JDBC admite el concepto de tiempo de espera de consulta. Puede establecer el tiempo de espera de consulta utilizando la siguiente:

java.sql.Statement.setQueryTimeout(seconds) 

Y manejar la SQLException lanzada por el método execute() por deshacer la transacción (por supuesto, que sólo funcionaría si ha de confirmación automática se pone a falso, y el controlador JDBC admite Statement.cancel()).

+0

Creo que este es un enfoque mejor y más simple, ya que permite que la banda de rodadura "se limpie solo", en lugar de hacerlo con un hilo externo (que siempre implica un nuevo conjunto de problemas). – Faustas

5

Echa un vistazo a Statement.cancel().

Cuestiones relacionadas