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
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.


EJEMPLOS:

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.





LINKOGRAFÍA







ü  http://www.euskalnet.net/jaoprogramador/j2ee/JDBC/jdbc18.htm

http://es.slideshare.net/LisbethOcaaBueno/resultset-69438440




Comentarios

Entradas más populares de este blog

TRANSACCIONES EN SQL SERVER

APLICACIONES N-CAPAS EN VISUAL.NET

PROCEDIMIENTOS ALMACENADOS