Este tema trata de las características de los ResultSets, como son los tipos de ResultSet, la concurrencia, la capacidad para cerrar el ResultSet comprometiendo el objeto conexión, y la especificación de las características de ResultSet.
Por defecto, el tipo de todos los ResultSets creados es solo de reenvío, la concurrencia es solo de lectura y los cursores se retienen en los límites del compromiso. Una excepción de ello la presenta WebSphere, que actualmente cambia el valor predeterminado de la capacidad de retención de cursores para que los cursores se cierren implícitamente al comprometerse. Estas características pueden configurarse mediante los métodos accesibles en objetos Statement, PreparedStatement y CallableStatement.
El tipo de un ResultSet especifica los siguiente acerca del ResultSet:
Las definiciones de estos tipos de ResultSet son las siguientes:
Los ResultSets de JDBC 1.0 son siempre solo hacia adelante. Los cursores desplazables se añadieron en JDBC 2.0.
Nota: las propiedades de agrupación por bloques habilitada y de conexión de tamaño de bloque afectan al grado de sensibilidad de un cursor TYPE_SCROLL_SENSITIVE. La agrupación por bloques mejora el rendimiento al almacenar en caché datos de la propia capa del controlador JDBC.
La concurrencia determina si el ResultSet puede actualizarse. Los tipos se definen de nuevo mediante constantes de la interfaz ResultSet. Los valores de concurrencia disponibles son los siguientes:
Los ResultSets de JDBC 1.0 son siempre solo hacia adelante. Los ResultSets actualizables se añadieron en JDBC 2.0.
Existe una situación en la que la aplicación especifica un ResultSet TYPE_SCROLL_INSENSITIVE, CONCUR_UPDATEABLE. La insensibilidad se implementa en el motor de bases de datos efectuando una copia de los datos. A continuación, no se permite al usuario realizar actualizaciones mediante esa copia en la base de datos subyacente. Si especifica esta combinación, el controlador cambia la sensibilidad a TYPE_SCROLL_SENSITIVE y crea el aviso, que indica que la petición se ha cambiado.
La característica de capacidad de retención determina si la llamada al compromiso en el objeto Connection cierra el ResultSet. La API de JDBC destinada a trabajar con la característica de capacidad de retención es nueva en la versión 3.0. Sin embargo, el controlador JDBC nativo ha proporcionado una propiedad de conexión para varios releases que le permite especificar ese valor predeterminado para todos los ResultSets creados bajo la conexión. El soporte de API altera temporalmente cualquier valor de la propiedad de conexión. Los valores de la característica de capacidad de retención se definen mediante constantes de ResultSet y son los siguientes:
Según la especificación JDBC, el valor predeterminado de la capacidad de retención está definida por la implementación. Algunas plataformas optan por utilizar CLOSE_CURSORS_ON_COMMIT como valor predeterminado. Esto no representa generalmente un problema para la mayoría de las aplicaciones, pero el usuario debe estar al corriente de lo que realiza el controlador que utiliza si está trabajando con cursores en los límites del compromiso. El controlador JDBC de IBM® Toolbox para Java también utiliza el valor predeterminado de HOLD_CURSORS_ON_COMMIT, pero el controlador JDBC de UDB para Windows NT tiene el valor predeterminado CLOSE_CURSORS_ON_COMMIT.
Las características de un ResultSet no cambian una vez que se ha creado el objeto ResultSet. Por tanto, las características se han especificado antes de crear el objeto. Puede especificar estas características mediante variantes cargadas a posteriori de los métodos createStatement, prepareStatement y prepareCall.