Operación de error de Java no permitida después de cerrar ResultSet

Sheeraz Gul 12 octubre 2023
  1. Error de Java java.sql.SQLException: Operación no permitida después de cerrar ResultSet
  2. Solucione el error de Java java.sql.SQLException: Operación no permitida después de cerrar ResultSet
Operación de error de Java no permitida después de cerrar ResultSet

Este tutorial demuestra el error java.sql.SQLException: Operación no permitida después de cerrar ResultSet en Java.

Error de Java java.sql.SQLException: Operación no permitida después de cerrar ResultSet

El error Operación no permitida después de cerrar el conjunto de resultados es una excepción de SQL cuando intentamos acceder a un conjunto de resultados cerrado. Como menciona Java Doc, cada vez que se cierra un objeto de declaración, si existe su objeto Resultset, también se cerrará.

El problema con el error es que la instancia de Resultset también guardará la declaración subyacente. Entonces, cuando se cierra la declaración subyacente, el Conjunto de resultados también se cerrará, lo que arroja el error.

Aquí hay un fragmento de código que arrojará el mismo error.

Código:

ResultSet Result_Set; // class variable

Statement Demo_Statement = null;
try {
  Demo_Statement = DB_Connection.createStatement();
  Result_Set = Demo_Statement.getGeneratedKeys();
} catch (Exception e) {
  throw e;
} finally {
  try {
    if (Demo_Statement != null)
      Demo_Statement.close();
  } catch (SQLException e) {
    throw e;
  }
}

System.out.println(Result_Set.next());

El código anterior con una conexión a la base de datos generará el siguiente error.

java.sql.SQLException: Operation not allowed after ResultSet closed

Solucione el error de Java java.sql.SQLException: Operación no permitida después de cerrar ResultSet

El problema en el código es que no podemos cerrar la instancia de declaración antes de que terminemos con Resultset. Una vez que hayamos terminado con el Conjunto de resultados, podemos cerrar tanto el Conjunto de resultados como la Instancia de declaración.

Como podemos ver, estamos tratando de imprimir el valor booleano de Result_Set.next(), pero estamos usando el Resultset después de cerrar la instancia de declaración, que también está cerrando el Resultset.

En el código anterior, la solución será no cerrar la declaración en este lugar o no usar el Conjunto de resultados después de cerrar la instancia de la declaración. Se basa en su aplicación, ya sea que podamos eliminar Demo_Statement.close() o System.out.println(Result_Set.next()); declaración.

Código:

ResultSet Result_Set; // class variable

Statement Demo_Statement = null;
try {
  Demo_Statement = DB_Connection.createStatement();
  Result_Set = Demo_Statement.getGeneratedKeys();
} catch (Exception e) {
  throw e;
} finally {
  try {
    if (Demo_Statement != null)
      Demo_Statement.close();
  } catch (SQLException e) {
    throw e;
  }
}

Acabamos de eliminar la parte en la que intentamos usar el Conjunto de resultados después de cerrar la instancia de declaración. Una vez que se hayan realizado todas las operaciones con el Conjunto de resultados, podemos cerrar tanto la instancia de declaración como el Conjunto de resultados.

Sheeraz Gul avatar Sheeraz Gul avatar

Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.

LinkedIn Facebook

Artículo relacionado - Java Error