jueves, 26 de octubre de 2017

ResultSet

  




                                          "AÑO DEL BUEN SERVIDOR AL CIUDADANO"

                                           ESCUELA ACADÉMICA DE INGENIERÍA DE SISTEMAS Y TELEPÁTICA

                                                                                            ASIGNATURA
                                                                       LABORATORIO DE PROGRAMACIÓN II

                                                                                            TEMA
                                                                                     ResultSet 

                                                                                           AUTORES
                                                                            LUZ CLARITA PEREZ DIAZ
                                                                            LUZ ISELA FLORES CHIGUEL
                                                                            LUZ CLARITA CHILCON SANCHEZ

                                                                                          DOCENTE
                                                                          ING.MARCO AURELIO PORRO CHULLI


                                                                    BAGUA GRANDE-UTCUBAMBA 
                                                                                       AMAZONAS


2017



1.DEFINICIÓN

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);
}
5.1.1 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.
5.1.2 Columnas
Los métodos getXXX suministran los medios para recuperar los valores de las columnas de la fila actúal. 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 1. 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 numero, 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

Recuperar datos de ResultSet
El objeto ResultSet proporciona varios métodos para obtener los datos de columna correspondientes a un fila. Todos los tienen el formato set<Tipo>, siendo <Tipo> un tipo de datos Java. Algunos ejemplos de estos métodos son getInt, getLong, getString, getTimestamp y getBlob. Casi todos estos métodos toman un solo parámetro, que es el índice que la columna tiene dentro del ResultSet o bien el nombre de la columna.
Las columnas de ResultSet están numeradas, empezando por el 1. Si se emplea el nombre de la columna y hay más de una columna que tenga ese mismo nombre en el ResultSet, se devuelve la primera. Algunos de los métodos get<Tipo> tienen parámetros adicionales, como el objeto opcional Calendar, que se puede pasar a los métodos getTime, getDate y getTimestamp. Consulte el Javadoc del paquete java.sql para obtener todos los detalles.
En los métodos get que devuelven objetos, el valor de retorno es null cuando la columna del ResultSet es nula. En tipos primitivos, no puede devolverse null. En estos casos, el valor es 0 o false. Si una aplicación debe distinguir entre null, y 0 o false, puede utilizarse el método wasNull inmediatamente después de la llamada. A continuación, este método puede determinar si el valor era un valor 0 o false real o si ese valor se ha devuelto debido a que el valor de ResultSet era de hecho null.
Consulte el Ejemplo: interfaz ResultSet para IBM Developer Kit para Java para obtener un ejemplo de utilización de la interfaz ResultSet.

Soporte de ResultSetMetaData
Cuando se llama al método getMetaData en un objeto ResultSet, el método devuelve un objeto ResultSetMetaData que describe las columnas de ese objeto ResultSet. En los casos en que la sentencia SQL que se va a procesar no se conoce hasta el momento de la ejecución, puede utilizarse ResultSetMetaData para determinar cuál de los métodos get hay que emplear para recuperar los datos. El ejemplo de código siguiente utiliza ResultSetMetaData para determinar cada uno de los tipos de columna del conjunto de resultados.

EJEMPLOS
 utilizar ResultSetMetaData para determinar cada tipo de columna de un conjunto de resultados
Nota: lea el apartado Declaración de limitación de responsabilidad sobre el código de ejemplo para obtener información legal importante.
ResultSet rs = stmt.executeQuery(sqlString);
ResultSetMetaData rsmd = rs.getMetaData();
int colType [] = new int[rsmd.getColumnCount()];
for (int idx = 0, int col = 1; idx < colType.length; idx++, col++)
colType[idx] = rsmd.getColumnType(col);


Ejemplo 01
 
Statement stmt = null;
try {
   stmt = conn.createStatement( );
   ResultSet rs= stmt.executeQuery("SELECT nombre, apellido FROM usuario");
 
   while(rs.next()){
       String nom=rs.getString(1);
       String ape=rs.getString("apellido");
   }
}
catch (SQLException e) {
}
finally {
   stmt.close();
   conn.close();
}


Ejemplo.2

package py.devtroce;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.PreparedStatement;

public class Test {

    public static Connection conn;

    public static Connection conectar() throws Exception {
        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
        String databaseURL = "jdbc:sqlserver://192.168.5.22:1433;databaseName=Portabilidad";
        return conn = java.sql.DriverManager.getConnection(databaseURL, "devtroce", "9¿¡e.3h++*pC46*h-?+");
    }

    public static void main(String[] args) {
        try {
            conn = conectar();

            PreparedStatement ps = conn.prepareStatement("{ call miProcedimientoAlmacedaoQuerySQL(?,?) }");

            ps.setInt(1, 1);
            ps.setString(2, "xxxyyy");

            ResultSet rs = ps.executeQuery();

            if (!rs.next())
                System.out.println("no hay registros");
            else do {
                System.out.println(rs.getString("ColumnaX"));
            } while (rs.next());
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
}



2. Resumen

Puede utilizar un objeto ResultSet para acceder a una tabla de datos generada ejecutando una consulta. Las filas de la tabla se recuperan en secuencia. Dentro de una fila, es posible acceder a los valores de las columnas en cualquier orden.
Los datos almacenados en ResultSet se recuperan mediante los diversos métodos get, en función del tipo de datos que se vaya a recuperar.El método net () permite desplazarse a la fila siguiente.
ResultSet permite obtener y actualizar columnas por nombre, aunque el uso del índice de columna mejora el rendimiento.
Movimiento de cursor
Un cursor, que es un puntero interno utilizado por un conjunto de resultados, señala a la fila perteneciente a dicho conjunto y a la que está accediendo el programa Java.
Se ha mejorado el rendimiento del método getRow(). Antes de la versión V5R2, al utilizar ResultSet.last(), ResultSet.afterLast() y ResultSet.absolute() con un valor negativo, el número de fila actual no estaba disponible. Las restricciones anteriores se han eliminado, con lo que el método getRow() es ahora totalmente funcional.


3. Summary
You can use a ResultSet object to access a generated data table by running a query. The rows of the table are retrieved in sequence. Within a row, you can access the values ​​of the columns in any order.
The data stored in ResultSet is retrieved using the various get methods, depending on the type of data being retrieved. The net () method allows you to move to the next row.
ResultSet allows you to retrieve and update columns by name, although using the column index improves performance.
Cursor movement
A cursor, which is an internal pointer used by a result set, points to the row belonging to that set and to which the Java program is accessing.
The performance of the getRow () method has been improved. Prior to V5R2, using ResultSet.last (), ResultSet.afterLast () and ResultSet.absolute () with a negative value, the current row number was not available. The above restrictions have been removed, so the getRow () method is now fully functional.



4. RECOMENDACIONES

ü    ·    Se recomienda usar esta clase para poder obtener los datos de una tabla mediante métodos ofrecidos por el resultset que luego los obtendrás en un formulario.
ü    ·   Se recomienda declarar un objeto de la clase resultset para poder obtener las consultas que le hayamos dicho que nos muestre.

5. CONCLUSIONES

·                    Usar un objeto que almacena todos los datos del resultado de una consulta y que devuelva los resultados en un objeto ResultSet resulta muy importante, por eso necesitamos declarar un ejemplar de la clase ResultSet para contener los resultados.

6. APRECIACIÓN DEL EQUIPO
Ø    Desde nuestro punto de vista la clase resultset resulta muy indispensable, no solo esta clase si no las demás que hemos estado viendo, en otras palabras, este objeto es como un deposito en donde nosotros le enviamos las consultas desde un formulario para que después en la BD se ejecute, pero los datos obtenidos están depositados en el objeto resultset para después llamarla a una tabla, lista, combobox, etc.

7. Glosario de Término

ü     Interfaz: Una interfaz en Java es una colección de métodos abstractos y propiedades.En las interfaces se especifica qué se debe hacer pero no su implementación. Serán las clases que implementen estas interfaces las que describan la lógica del comportamiento de los métodos.

ü     Javadoc: Es una utilidad de Oracle para la generación de documentación de APIs en formato HTML a partir de código fuente Java. Javadoc es el estándar de la industria para documentar clases de Java. La mayoría de los IDEs los generan automáticamente.

ü    Query: SQL (por sus siglas en inglés Structured Query Language; en español lenguaje de consulta estructurada) es un lenguaje declarativo de acceso a bases de datos relacionales que permite especificar diversos tipos de operaciones en ellas.

8 BIBLIOGRAFÍA O LINKOGRAFÍA


ü      https://es.wikipedia.org/wiki/SQL

 diapositiva
https://www.slideshare.net/LUZCLARITAPEREZDIAZ/resultset-81265930


1 comentario:

  1. Se tiene que definir 3 CONCLUSIONES y RECOMENDACIONES. Se tiene que definir al menos 10 términos en su GLOSARIO.

    ResponderEliminar