RESULTSET
RESULTSET:
La interfaz ResultSet proporciona
métodos getter (getBoolean, getLong, etc.) para recuperar valores de columna de
la fila actual. Los valores se pueden recuperar utilizando el número de índice
de la columna o el nombre de la columna. En general, utilizar el índice de
columna será más eficiente. Las columnas se numeran desde 1. Para una
portabilidad máxima, las columnas de conjunto de resultados dentro de cada fila
se deben leer en orden de izquierda a derecha y cada columna debe leerse una
sola vez.
Para los métodos getter, un controlador
JDBC intenta convertir los datos subyacentes al tipo Java especificado en el
método getter y devuelve un valor Java adecuado. La especificación JDBC tiene
una tabla que muestra las asignaciones permitidas de tipos SQL a tipos Java que
pueden ser utilizados por los métodos getter de ResultSet.
Un
ResultSet contiene todas las filas que satisfacen las condiciones de una
sentencia SQL y proporciona el acceso a los datos de estas filas mediante un
conjunto de métodos get que permiten el acceso a las diferentes columnas de la
filas. El método ResultSet.next se usa para moverse a la siguiente fila del
result set, convirtiendo a ésta en la fila actúal.El formato general de un result set es una tabla con cabeceras de columna y los valores correspondientes devueltos por la ‘query’. Por ejemplo, si la ‘query’ es SELECT a, b, c FROM Table1, el resultado tendrá una forma semejante a:
a b c
12345 Cupertino CA
83472 Redmond WA
83492 Boston MA
El siguiente fragmento de código es un ejemplo de la ejecución de una sentencia SQL que devolverá una colección de filas, con la columna 1 como un int, la columna 2 como una String y la columna 3 como un array de bytes:
java.sql.Statement stmt = conn.createStatement();
ResultSet r = stmt.executeQuery("SELECT a, b, c FROM Table1");
while (r.next())
{
// print the values for the current row.
int i = r.getInt("a");
String s = r.getString("b");
float f = r.getFloat("c");
System.out.println("ROW = " + i + " " + s + " " + f);
}
- Filas y Cursores
Un ResultSet mantiene un cursor que apunta a la fila actúal de datos. El cursor se mueve una fila hacia abajo cada vez que se llama al método next. Incialmente se sitúa antes de la primera fila, por lo que hay que llamar al método next para situarlo en la primera fila conviertiendola en la fila actúal. Las filas de ResultSet se recuperan en secuencia desde la fila más alta a la más baja.
Un cursor se mantiene válido hasta que el objeto Resultset o su objeto padre Statement se cierra.
En SQL, el cursor resultado para una tabla tiene nombre. Si una base de datos permite upadtes posicionados o deletes posicionados, el nombre del cursor es necesario y debe ser proporcionado como un parámetro del comando update o delete. El nombre del cursor puede obtenerse mediante una llamada al método getCursorName.
No todas las bases de datos soportan updates o deletes posicionados. Los métodos DatabaseMetaData.supportsPositionedDelete y DatabaseMetaData.supportsPositionedUpdate nos permiten descubrir si estas operaciones están soportadas en una conexión dada. Cuando lo están, el driver o la DBMS deben asegurarse que las filas seleccionadas están apropiadamente bloquedas y por tanto que estas operaciones no provoquen actualizaciones anomalas ni otros problemas de concurrencia.
- Columnas
Los métodos getXXX suministran los medios para recuperar los valores de las columnas de la fila actual. Dentro de cada fila, los valores de las columnas pueden recuperarse en cualquier orden, pero para asegurar la máxima portabilidad, deberían extraerse las columnas de izquierda a derecha y leer los valores de las columnas una única vez.
Puede usarse o bien el nombre de la columna o el número de columna para referirse a esta. Por ejemplo: si la columna segunda de un objeto RecordSet rs se denomina “title” y almacena valores de cadena, cualquiera de los dos ejemplos siguientes nos devolverá el valor almacenado en la columna.
String s = rs.getString("title");
String s = rs.getString(2);
Nótese que las columnas se numeran de izquierda a derecha comenzando con la columna Además los nombres usados como input en los métodos getXXX son insensibles a las mayúsculas.
La opción de usar el nombre de columna fue provista para que el usuario que especifica nombres de columnas en una ‘query’ pueda usar esos nombres como argumentos de los métodos getXXX. Si, por otro lado, la sentencia select no especifica nombres de columnas (tal como en “select * from table1” o en casos donde una columna es derivada), deben usarse los números de columna. En estas situaciones, no hay forma de que el usuario sepa con seguridad cuales son los nombres de las columnas.
En algunos casos, es posible para una query SQL devolver un result set con más de una columna con el mismo nombre. Si se usa el nombre de columna como argumento en un método getXXX, éste devolverá el valor de la primera columna que coincida con el nombre. Por eso, si hay múltiples columnas con el mismo nombre, se necesita usar un índice de columna para asegurarse que se recupera el valor de la columna correcta. Esto puede ser ligeramente más eficiente que usar los números de columna.
Información acerca de las columnas en un ResultSet es accesible mediante el método ResultSet.getMetaData. El objeto ResultSetMetaData devuelto nos da el número, tipo y propiedades de las columnas de los objetos ResultSet.
Si se conoce el nombre de una columna, pero no su indice, puede usarse el método findColumn para encontrar el número de columna.
PROPIEDADES DEL RESULTSET:
En la lista siguiente se resumen las propiedades más importantes del
objeto ResultSet:
Establece o devuelve
el límite actual de longitud de datos obtenido de un campo de texto de varias
líneas. El límite se aplica a los campos de serie cortos así como también a los
campos de texto de varias líneas.
Establece o devuelve
el límite inicial sobre el número de registros que se incluirá en el conjunto
de resultados cuando se ejecuta una consulta.
Devuelve el recuento
de registros (número de filas) del conjunto de resultados.
Los métodos del objeto Resultset:
- Siguiente fila: next()
public abstract boolean next() throws SQLException
Pasa a la siguiente fila, o a la primera cuando se ejecuta por primera vez. Devuelve true si se consigue y false si no quedan filas.
- Cierre del ResultSet: close()
public abstract void close() throws
SQLException
Cierra inmediatamente el ResultSet,
liberando los recursos utilizados.
- Resultados nulos: wasNull()
public abstract boolean wasNull() throws
SQLException
Se usa después de obtener un null con un
método getXXX() para
comprobar que corresponde a un valor NULL SQL.
- Obtención de valores: getXXX()
public abstract tipoJava getXXX(int
indiceColumna) throws
SQLException
public abstract tipoJava getXXX(String nombreColumna) throws SQLException
public abstract tipoJava getXXX(String nombreColumna) throws SQLException
Obtienen el valor contenido en la
columna como un tipoJava, o un null si se trataba de un valor
NULL de SQL.
- Indices de las columnas: findColumn()
public abstract int findColumn(String nombreColumna)
throws SQLExceptionObtiene el índice de una columna
conocido su nombre.
El siguiente fragmento de código es un ejemplo de la ejecución de una sentencia SQL que devolverá una colección de filas, con la columna 1 como un int, la columna 2 como una String y la columna 3 como un array de bytes:
java.sql.Statement stmt = conn.createStatement();
ResultSet r = stmt.executeQuery("SELECT a, b, c FROM Table1");
while (r.next())
{
// print the values for the current row.
int i = r.getInt("a");
String s = r.getString("b");
float f = r.getFloat("c");
System.out.println("ROW = " + i + " " + s + " " + f);
}
Ejemplo:
interfaz ResultSet
Este es un ejemplo de
cómo utilizar la interfaz ResultSet.
Nota: Al utilizar los ejemplos de código,
acepta los términos de: Información sobre licencia de código y exención de
responsabilidad.
import java.sql.*;
/**
ResultSetExample.java
Este programa muestra la utilización de ResultSetMetaData y
ResultSet para visualizar todos los datos de una tabla aunque
el programa que obtiene los datos no sabe cuál es el aspecto
que tendrá la tabla (el usuario pasa los valores correspondientes
a la tabla y a la biblioteca).
**/
public class ResultSetExample {
public static void main(java.lang.String[] args)
{
if (args.length != 2) {
System.out.println("Uso: java ResultSetExample <biblioteca>
<tabla>");
System.out.println("
siendo <biblioteca> la biblioteca que contiene la <tabla>");
System.exit(0);
}
Connection con = null;
Statement s = null;
ResultSet rs = null;
ResultSetMetaData rsmd =
null;
try {
//
Obtener una conexión a base de datos y preparar una sentencia.
Class.forName("com.ibm.db2.jdbc.app.DB2Driver");
con =
DriverManager.getConnection("jdbc:db2:*local");
s =
con.createStatement();
rs =
s.executeQuery("SELECT * FROM " + args[0] + "." + args[1]);
rsmd
= rs.getMetaData();
int
colCount = rsmd.getColumnCount();
int
rowCount = 0;
while
(rs.next()) {
rowCount++;
System.out.println("Datos
para la fila " + rowCount);
for (int i = 1; i <= colCount; i++)
System.out.println(" Fila " + i + ": " +
rs.getString(i));
}
} catch (Exception e) {
//
Manejar los errores.
System.out.println("Tenemos un error... ");
e.printStackTrace();
} finally {
//
Hay que asegurarse de que siempre se haga
// el
borrado. Si la conexión se cierra, la
// sentencia que hay debajo de ella también se cerrará.
if
(con != null) {
try {
con.close();
} catch (SQLException e) {
System.out.println("Error grave: no se puede cerrar el objeto
conexión");
}
}
}
}
}
RESUMEN:
La interfaz ResultSet proporciona métodos getter (getBoolean, getLong, etc.) para recuperar valores de columna de la fila actual. Los valores se pueden recuperar utilizando el número de índice de la columna o el nombre de la columna. En general, utilizar el índice de columna será más eficiente. Las columnas se numeran desde 1. Para una portabilidad máxima, las columnas de conjunto de resultados dentro de cada fila se deben leer en orden de izquierda a derecha y cada columna debe leerse una sola vez.
Para los métodos getter, un controlador
JDBC intenta convertir los datos subyacentes al tipo Java especificado en el
método getter y devuelve un valor Java adecuado. La especificación JDBC tiene
una tabla que muestra las asignaciones permitidas de tipos SQL a tipos Java que
pueden ser utilizados por los métodos getter de ResultSet.
SUMMARY:
The ResultSet interface provides getter methods
(getBoolean, getLong, etc.) to retrieve column values from the current row.
The values can be retrieved using the index number of the column or the name
of the column. In general, using the column index will be more efficient.
Columns are numbered from 1. For maximum portability, the result set columns
within each row must be read in order from left to right and each column must
be read only once.
For getter methods, a JDBC driver attempts to
convert the underlying data to the specified Java type in the getter method and
returns an appropriate Java value. The JDBC specification has a table that
shows the allowable assignments of SQL types to Java types that can be used by
the ResultSet getter methods.
RECOMENDACIONES:
- En primer lugar para utilizar la clase ResultSet hay que manejar bien su
estructura para poder emplear las variables y procedimientos adecuados.
-
Antes de empezar a utilizar dicha clase hay que importar la librería
ResultSet dentro del java.
CONCLUCIÓN:
La clase ResultSet es una clase de gran importancia dentro
del desarrollo de aplicaciones en el entorno Java, y como parte del entorno de
desarrollo de aplicaciones debemos conocer y manejar clases como ésta que la
encontramos entro de la API JDBC.
JDBC no sólo admite conjuntos
de resultados bidireccionales, sino que también admite actualizaciones en sitio
en ResultSets. Esto significa que en lugar de crear una nueva instrucción SQL
para cambiar los valores almacenados actualmente en la base de datos, sólo
puede modificar el valor contenido dentro del ResultSet y se enviará
automáticamente a la base de datos para esa columna de esa fila.
APRECIACIÓN DEL EQUIPO:
Gracias a este trabajo
asignado, nos hemos profundizado un poco más dentro de la clase ResultSet
conocer su utilidad, su sintaxis y los casos en los que se puede utilizar dicha
clase.
Además estudiamos algunas
características, propiedades y métodos
que nos permitirán hacer uso de una forma mas eficiente y acertada de la
clase ResultSet.
GLOSARIO DE TÉRMINOS:
- INTERFAZ: Dispositivo capaz de transformar las señales generadas por un aparato en señales comprensibles por otro.
- SENTENCIA SQL: es un conjunto de instrucciones que se envían al Sql con el fin de obtener una información requerida.
- FRAGMENTO DE CÓDIGO: Los fragmentos de código son pequeños bloques de código reutilizable que se pueden insertar en un archivo de código mediante un comando de menú contextual o una combinación de teclas de acceso rápido. Normalmente contienen bloques de código muy utilizados, como bloques try-finally o if-else, pero pueden utilizarse para insertar clases o métodos completos.
- QUERY: consulta realizada contra una base de datos. Se usa para obtener datos, modificarlos o bien borrarlos.
- LONGITUD DE DATO: longitud de datos dentro del sql se le asigna un valor o lngitud del tamaño que creemos que guardara la información requerida.
- EJECUTAR: (execute, run, correr). En informática, ejecutar es la acción de iniciar la carga de un programa o de cualquier archivo ejecutable.
LINKOGRAFÍA
ü http://www.euskalnet.net/jaoprogramador/j2ee/JDBC/jdbc18.htm
http://es.slideshare.net/LisbethOcaaBueno/resultset-69438440
http://es.slideshare.net/LisbethOcaaBueno/resultset-69438440
Comentarios
Publicar un comentario