Un objeto ResultSet
es una tabla de datos que representa un conjunto de resultados de base de datos. Puede ser creado a través de cualquier objeto que implementa el interfaz Statement
, incluyendo PreparedStatement,CallableStatement
.
Es necesario un bucle para iterar a través de todos los datos en el ResultSet
, utilizando el método ResultSet.next
se hace avanzar al cursor a la siguiente fila.
Los objeto ResultSet
predeterminados no permiten la actualización , ademas, solo se puede mover el cursor hacia adelante. Sin embargo, puede crear objetos ResultSet
que se pueden desplazar hacia adelante y hacia atrás o moverse a una posición absoluta y actualizarse.
Para poder utilizar el ResultSet para actualizaciones de tablas, tendremos que crear la consulta con la opción ResultSet.CONCUR_UPDATABLE
, es un parámetro opcional de la creación de la sentencia:
conexion.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
Además, es necesario actualizar el dato en la fila actual del objeto ResultSet:
resulSet.updateFloat( "PRICE", f * percentage);//recupera la columna con nombre "PRICE"
resulSet.updateRow();
Con la opción ResultSet.TYPE_SCROLL_SENSITIVE
se crea un objeto ResultSet
cuyo que puede recorrerse hacia adelante y hacia atrás en relación con la posición actual y con una posición absoluta.
Veamos el ejemplo siguiente, el método modifyPrices
(float percentage) multiplica el precio del café por un porcentaje dentro de la repetitiva que recorre, utilizando el objeto ResultSet
, todas las filas de la tabla coffees utilizando el objeto ResultSet
.
Ejemplo:
public void modifyPrices(float percentage) throws SQLException {
Statement stmt = null;
try {
stmt = con.createStatement();
stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
ResultSet uprs = stmt.executeQuery(
"SELECT * FROM COFFEES");
while (uprs.next()) {
float f = uprs.getFloat("PRICE"); //recupera la columna con nombre "PRICE"
uprs.updateFloat( "PRICE", f * percentage); //también se puede utilizar updateFloat( 3, f * percentage)
uprs.updateRow();
}
} catch (SQLException e ) {
JDBCTutorialUtilities.printSQLException(e);
} finally {
if (stmt != null) { stmt.close(); }
}
}