De acuerdo con la documentation para getResultSet
en java.sql.Statement
, que dice:getResultSet() "debe ser llamado sólo una vez por resultado"
Recupera el resultado actual como un objeto ResultSet. Este método debe llamarse solo una vez por resultado.
El uso de algunos código de prueba, me encontré con executeQuery()
y varias llamadas a getResultSet()
y observaron que el ResultSet
regresado señaló al mismo objeto. Así que supongo que no devolverá un ResultSet
diferente que necesitaría cerrar individualmente. Pero, por supuesto, esto podría ser exclusivo de mis controladores JDBC.
Mirando el documentation para ResultSet
que dice: objeto ResultSet
Un defecto no es actualizable y tiene un cursor que se mueve hacia adelante solamente. Por lo tanto, puede recorrerlo solo una vez y solo desde la primera fila hasta la última fila.
Esto parece una buena razón por la que puede no ser una buena idea llamarlo varias veces ya que puede llevar a una situación de "error". Si esta fue la única razón, sentí que podrían haberlo dicho, así que creo que podría haber algo más que solo esto.
¿Alguien sabe por qué uno no debe llamar al getResultSet
más de una vez por resultado? Este question es lo que me hizo curioso en primer lugar.
No publicar esto como una respuesta porque es sólo una corazonada, pero sospecho que es de esta manera dar un margen de maniobra a los desarrolladores de controladores JDBC, lo que les permite no definir lo que sucede cuando lo llamas más de una vez. En su caso particular, funciona, pero si alguna vez cambió los controladores JDBC, podría no ser así. –
Creo que es así de simple: el objeto ResultSet tiene estado. Solo hay un objeto ResultSet como miembro del Statement. Obtener el objeto no vuelve a ejecutar la declaración. No se garantiza que el objeto por segunda vez esté en el mismo estado que el primer get si modificó algo después del primer get. Entonces es solo una advertencia. Mirando el controlador jdbc de Postres (org.postgresql.jdbc2.AbstractJdbc2Statement), podemos ver que internamente realiza muchas llamadas como esta: return (result! = Null && result.getResultSet()! = Null); – Glenn