Pregunta

Estoy obteniendo esta declaración BatchUpdateException de una declaración stmt.executeBatch ():

BatchUpdateException: A resultset was created for update

Internet no tiene ninguna información sobre este mensaje de excepción. ¿Qué significa? El rastreo no contiene nada útil que no sea el que falló un procedimiento almacenado.

¿Fue útil?

Solución

Interpretaría el mensaje como lo que significa que una declaración SQL que agregó a través de addBatch() ha producido un ResultSet, lo que significa que no es tu normal INSERT, UPDATE o DELETE declaración.

Las declaraciones que deberían devolver los resultados no se pueden ejecutar en lotes con JDBC.

los Tutorial JDBC (Bajo el encabezado "Excepciones de actualización por lotes de manejo") lo confirma:

Obtendrá una batchupdateException cuando llame al método ejecutebatch si (1) una de las declaraciones SQL que agregó al lote produce un conjunto de resultados (generalmente una consulta) o (2) una de las declaraciones SQL en el lote no se ejecuta con éxito con éxito. por alguna otra razón.

Parece que te estás encontrando con el caso 1 aquí.

Otros consejos

Una actualización por lotes son varias declaraciones de inserción/actualización/eliminación que la base de datos procesa juntas. Esto es habitual por razones de rendimiento. 1x 1000 insertos es mucho más rápido que 1000x 1 inserto. Un BatchUpdateException significa que 1 (o más) las declaraciones fallaban con mayor frecuencia debido a una violación de restricción. Tendrá que mirar el procedimiento almacenado para ver qué ha estado haciendo. Mayby, su DBA puede brindarle más información sobre lo que salió mal.

Dejé caer una columna de la tabla. Cuando intenté insertar registros en esa tabla, estaba obteniendo BatchUpdateException.

Después de ejecutar el siguiente comando, el problema se resolvió

Reorg table table_name

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top