miércoles, 23 de noviembre de 2016

RESULTSET




Escuela Profesional De Ingeniería De Sistemas Y Telemática


              INTEGRANTES:

                 - CRISTHIAN SERGIO KAYAP YAGKIKAT

                 - INGRID LESLY CORONEL ACUÑA


          DOCENTE: PORRO CHULLI, Marco Aurelio


 ResultSet
El objeto ResultSet proporciona varios métodos para obtener los datos de columna correspondientes a un fila. Todos ellos tienen el formato get<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.
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 las filas. El método ResultSet.next se usa para moverse a la siguiente fila del result set, convirtiendo a ésta en la fila actual.
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 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.
Los métodos
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.

Método getXXX()
Tipo Java
getString
String
getBoolean
boolean
getByte
byte
getShort
short
getInt
int
getLong
long
getFloat
float
getDouble
double
getBigDecimal*
BigDecimal
getBytes
byte[]
getDate
Date
getTime
Time
getTimestamp
Timestamp
getAsciiStream**
InputStream
getUnicodeStream**
InputStream
getBinaryStream**
InputStream


** Traducen el valor a cadenas de caracteres ASCII, Unicode o bytes. Estas corrientes deben leerse completas antes de continuar con ninguna otra columna, ya que esto provocaría el cierre automático de la corriente.
 
public abstract BigDecimal getBigDecimal (columna, int precision) throws SQLException
Donde precision indica el número de cifras decimales.

Lectura de avisos: getWarnings()
public abstract SQLWarning getWarnings() throws SQLException

Obtiene el primer aviso de la cadena de avisos SQL producidos durante el trabajo con este ResultSet o null si no hay ninguno. La cadena de avisos se renueva con cada fila.
  
Borrado de avisos: clearWarnings()
public abstract void clearWarnings() throws SQLException
Borra todos los avisos de la cadena.

Obtención del nombre del cursor: getCursorName()
public abstract String getCursorName() throws SQLException
Obtiene el nombre del cursor asignado a este ResultSet.

Propiedades del ResultSet: getMetaData()
public abstract ResultSetMetaData getMetaData() throws SQLException
Obtiene en un objeto ResultSetMetaData información sobre el número de columnas y su estructura.

Obtención de Objetos: getObject()
public abstract Object getObject(int indiceColumna) throws SQLException
public abstract Object getObject(int nombreColumna) throws SQLException
Obtiene el valor contenido en la columna como un objeto Java cuyo tipo sigue la traducción estándar JDBC de tipos SQL a tipos Java. Este método es válido para tipos específicos de la base de datos.

Indices de las columnas: findColumn()
public abstract int findColumn(String nombreColumna) throws SQLException
Obtiene el índice de una columna conocido su nombre.

Recuperar datos de ResultSet
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.

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.

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);

Propiedades del objeto ResultSet
En la lista siguiente se resumen las propiedades del objeto ResultSet:
Nombre de propiedad
MaxMultiLineTextLength
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.
MaxResultSetRows
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.
RecordCount
Devuelve el recuento de registros (número de filas) del conjunto de resultados.
  
EJEMPLOS
1. Este programa hace una demostración de cómo utilizar un ResultSetMetaData y un ResultSet para visualizar todos los metadatos de ResultSet creado al consultar una tabla. El usuario pasa el valor de la tabla y la biblioteca.

import java.sql.*;

ResultSetMetaDataExample.java

Este programa muestra la utilización de ResultSetMetaData y
ResultSet para visualizar todos los metadatos relacionados con un ResultSet
creado al consultar una tabla. El usuario pasa el valor correspondiente a
la tabla y a la biblioteca.
**/
public class ResultSetMetaDataExample {

    public static void main(java.lang.String[] args)
    {
        if (args.length != 2) {
            System.out.println("Uso:  java ResultSetMetaDataExample <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;
for (int i = 1; i <= colCount; i++) {
System.out.println("Información acerca de la columna " + i);
System.out.println("   Nombre........: " + rsmd.getColumnName(i));
System.out.println("   Tipo de datos.....: " + rsmd.getColumnType(i) +" ( " + rsmd.getColumnTypeName(i) + " )");
System.out.println("   Precisión.....: " + rsmd.getPrecision(i));
System.out.println("   Escala........: " + rsmd.getScale(i));
System.out.print  ("   Permitir nulos: ");
if (rsmd.isNullable(i)==0)
                    System.out.println("false");
else
                    System.out.println("true");
}

 } 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");
                }
            }
        }
    }
}

2.  package chuidiang.ejemplos.base_datos;

import java.sql.*;

/**
 * Clase de prueba de conexión con una base de datos MySQL
 */
public class PruebaMySQL {
   
    /**
     * Crea una instancia de la clase MySQL y realiza todo el código
     * de conexión, consulta y muestra de resultados.
     */
    public PruebaMySQL()
    {
        // Se mete todo en un try por los posibles errores de MySQL
        try
        {
            // Se registra el Driver de MySQL
            DriverManager.registerDriver(new org.gjt.mm.mysql.Driver());
           
            // Se obtiene una conexión con la base de datos. Hay que
            // cambiar el usuario "root" y la clave "la_clave" por las
            // adecuadas a la base de datos que estemos usando.
            Connection conexion = DriverManager.getConnection (
                "jdbc:mysql://localhost/prueba","root", "la_clave");
           
            // Se crea un Statement, para realizar la consulta
            Statement s = conexion.createStatement();
           
            // Se realiza la consulta. Los resultados se guardan en el
            // ResultSet rs
            ResultSet rs = s.executeQuery ("select * from persona");
           
            // Se recorre el ResultSet, mostrando por pantalla los resultados.
            while (rs.next())
            {
                System.out.println (rs.getInt ("Id") + " " + rs.getString (2)+
                    " " + rs.getDate(3));
            }
           
            // Se cierra la conexión con la base de datos.
            conexion.close();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
   
    /**
     * Método principal, instancia una clase PruebaMySQL
     *
     * @param args the command line arguments
     */
    public static void main(String[] args)
    {
        new PruebaMySQL();
    }
   
}
RESUMEN
Casi todos estos metodos toman un solo parametro, que es el indice que la columna tiene dentro del Result Set o bien el nombre de la columna.

Si se emplea el nombre de la columna y hay mas de una columna que tenga ese mismo nombre en el Result Set, se devuelve la primera.

Un Result Set 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 metodos get que permiten el acceso a las diferentes columnas de las filas.

El siguiente fragmento de codigo es un ejemplo de la ejecucion de una sentencia SQL que devolvera una coleccion de filas, con la columna 1 como un int, la columna 2 como una String y la columna 3 como un array de bytes: La opcion 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 metodos get XXX.

SUMMARY

Almost all of these methods take a single
parameter, which is the index that the column has within the Result Set or the
name of the column. If the name of the column is used and there is more than
one column that has the same name in the Result Set, the first one is returned.
A Result Set contains all the rows that satisfy the conditions of an SQL
statement and provides access to the data in these rows using a set of get
methods that allow access to the different columns of the rows. The following
code fragment is an example of the execution of an SQL statement that will
return a collection of rows, with column 1 as an int, column 2 as a String and
column 3 as an array of bytes: The option to use The column name was provided
so that the user who specifies column names in a query can use those names as
arguments of get XXX methods.

RECOMENDACIONES:
Nosotras como estudiantes recomendamos hacer utilidad de este objeto ya  que permiten  el fácil acceso a las diferentes columnas de la filas en una Base de Datos
Además 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.

En conclusión

Como un elemento básico del desarrollo de Java, la API JDBC es algo que todos los desarrolladores Java deben conocer como la parte posterior de su mano. Lo curioso es que la mayoría de los desarrolladores no se han mantenido al día con las mejoras de la API a lo largo de los años, por lo que pierden los trucos de ahorro de tiempo descritos en este artículo.
Si usted decide utilizar las características más nuevas de JDBC, depende de usted, por supuesto. Un aspecto clave a considerar será la escalabilidad del sistema en el que está trabajando. Cuanto mayor sea la escala, más restringido será el uso de la base de datos y, por lo tanto, más tendrá que reducir el tráfico de red en su contra. Rowsets, llamadas escalares y actualizaciones por lotes serán tus amigos aquí. De lo contrario, pruebe los ResultSets desplazables y actualizables (que no consumen tanta memoria como los conjuntos de filas) y mida el éxito de escalabilidad. Probablemente no será tan malo como usted espera.

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.
Pedir un ResultSet actualizable es similar al proceso implicado en pedir un ResultSet desplazable. De hecho, es donde usará el segundo parámetro para createStatement (). En lugar de especificar ResultSet.CONCUR_READ_ONLY para el segundo parámetro, envíe ResultSet.CONCUR_UPDATEABLE.

APRECIACION DEL EQUIPO

El hacer la investigación para la elaboración de este informe nos ha servido de mucho y nos ha dado a conocer lo que es el Objeto Result Set y para qué sirve.
Además de todo lo que nos dio a conocer esta información se puede decir que ya tenemos una idea de cómo utilizarlo al elaborar un programa.

GLOSARIO DE TERMINOS
 Sentencia:  una sentencia es una línea de código en algún lenguaje de programación. Un programa está constituido por múltiples sentencias de programación, lo que es llamado código fuente.
 Método: Un método es una subrutina cuyo código es definido en una clase y puede pertenecer tanto a una clase, como es el caso de los métodos de clase o estáticos, como a un objeto, como es el caso de los métodos de instancia.
  Cursor: Es una señal, normalmente parpadeante, que indica en una pantalla de computadora la posición en la que se puede realizar una acción.
  Parámetro: Es una variable utilizada para recibir valores de entrada en una rutina o subrutina.
  Driver: Un Driver, o controlador, es un programa que controla un dispositivo. Cada dispositivo, ya sea una impresora, un teclado, etc., debe tener un programa controlador.
Anómalas: Es una acción; que se desvía de lo que se considera normal, regular, natural.
 Suministran: Dar o proporcionar a una persona o entidad una cosa que necesita.

BIBLIOGRAFIA O LINKOGRAFIA

http://es.slideshare.net/INGRIDLESLYCORONELAC/resulteset


No hay comentarios:

Publicar un comentario