Ejemplo de ResultSet scrollable y updatable
He metido todos los artículos de esta wiki y de http://chuidiang.org relativos a Java y JDBC en un pdf Libro JDBC Java. A través del enlace puedes comprarlo si tienes interés.
Viene de callableStatement()
ResultSet scrollable y updatable[editar]
Cuando hacemos una consulta a base de datos con una statement()
, obtenemos un ResultSet
en el que podemos ir leyendo los resultados de la consulta. Este ResultSet
normalmente es sólo de lectura (no nos permite modificar la base de datos) y se va recorriendo secuencialmente, desde la primera fila de resultados a la última. Pues bien, podemos cambiar esta configuración al crear el Statement
, de forma que obtengamos un ResultSet
por el que podamos avanzar y retroceder, además de que nos permita modificar los datos. Sólo un detalle importante a tener en cuenta: Todo esto funciona si la consulta es una consulta simple a una única tabla de base de datos.
La forma de hacerlo es la siguiente
Statement st = conexion.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
ResultSet rs = st.executeQuery("select * from tabla_prueba");
El primer parámetro, ResultSet.TYPE_SCROLL_INSENSITIVE
, indica que el ResultSet
debe ser navegable hacia delante y hacia atrás, de forma que una vez leídos los resultados, podamos retroceder para volver a leerlos. La parte _INSENSTIVE
indica que no verá futuras modificaciones hechas por terceros en la base de datos, es decir, que si otro usuario cambia los datos en la base de datos, nuestro ResultSet
no volverá a consultar la base de datos cada vez que le hagamos avanzar o retroceder, y no nos enteraremos de esos futuros cambios.
El segundo parámetro ResultSet.CONCUR_UPDATABLE
nos indica que el ResultSet
debe permitir modificar los datos en la base de datos desde el mismo ResultSet
. La opción por defecto es sólo lectura, ResultSet.CONCUR_READ_ONLY
.
El siguiente trozo de código, por ejemplo, lee los resultados de la forma normal, avanzando con el método next()
, y cuando llega al final vuelve a recorrer los resultados, pero esta vez hacia atrás.
while (rs.next()){
System.out.println(rs.getObject(1));
System.out.println(rs.getObject(2));
}
while (rs.previous()){
System.out.println(rs.getObject(1));
System.out.println(rs.getObject(2));
}
Por supuesto, tenemos más métodos que nos permiten ir directamente a determinadas posiciones, como afterLast()
, last()
, beforeFirst()
y first()
.
Modificar filas[editar]
También podemos modificar el contenido de la base de datos. Para ello, vamos recorriendo el ResultSet
hasta llegar a la posición que nos interesa y una vez en esa posición, usamos los métodos update()
para modificar el contenido. Primero se modifican las columnas concretas que nos interesan y finalmente se llama a updateRow()
para hacer los cambios. En el siguiente código suponemos que ya nos hemos ido a la fila concreta que nos interesa del ResultSet
. Ejecutamos entonces
rs.updateString(2, "nuevo texto");
rs.updateRow();
Borrar filas[editar]
Se puede también borrar una fila concreta. Para ello vamos recorriendo el ResultSet
hasta llegar a ella y hacemos la llamada a
rs.deleteRow();
Insertar filas[editar]
Y finalmente, también es posible insertar nuevas filas. El ResultSet
tiene un método especial que nos lleva a una fila "vacía" preparada para insertar. Este método es moveToInsertRow()
. Una vez en ella, llamamos a los update()
necesarios para dar valores a cada columna y finalmente llamamos a insertRow()
para hacer efectivos los cambios. El siguiente trozo de código es un ejemplo de todo esto
rs.moveToInsertRow();
rs.updateString(2, "nueva fila");
rs.insertRow();
Sigue en Meta datos de la base de datos