jueves, 24 de noviembre de 2016

TRABAJO DE RESULTSET






















     

      1.    CONTENIDO


RESULTSET

Mediante esta interfaz, se organizan en tablas los resultados de las órdenes SQL. Las filas deben leerse una detrás de otra, pero las columnas pueden leerse en cualquier orden.  
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 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 bloqueadas y por tanto que estas operaciones no provoquen actualizaciones anómalas 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 número, tipo y propiedades de las columnas de los objetos ResultSet.
Si se conoce el nombre de una columna, pero no su índice, puede usarse el método findColumn para encontrar el número de columna.

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 precisión) throws SQLException
Donde precisión 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.


Índices de las columnas: findColumn()

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


EJEMPLOS DE RESULTSET

EJEMPLO 1
·         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).

import java.sql.*;

/**
ResultSetExample.java
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");
                }
            }
        }
    }
}

EJEMPLO 2

stmt = con.prepareStatement("SELECT * FROM personas");
                 
rs = stmt.executeQuery();
                 
// Desconocemos el número de columnas y filas que tiene la tabla
// Primero pintamos los nombres de las columnas
for (int x=1;x<=rs.getMetaData().getColumnCount();x++)
  System.out.print(rs.getMetaData().getColumnName(x)+ "\t");
                 
System.out.println("");
                 
// Ahora volcamos los datos
while(rs.next()) {
  for (int x=1;x<=rs.getMetaData().getColumnCount();x++)
    System.out.print(rs.getString(x)+ "\t");
                 
  System.out.println("");
}
  2.    RESUMEN

Mediante esta interfaz, se organizan en tablas los resultados de las órdenes SQL. Las filas deben leerse una detrás de otra, pero las columnas pueden leerse en cualquier orden.  
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 actúal.

Propiedades de Resultset

·         getMetaData()
·         Obtención de Objetos: getObject()
·         Índices de las columnas: findColumn()

   3.    SUMMARY

Using this interface, the results of SQL commands are organized into tables. Rows should be read one after another, but columns can be read in any order. A ResultSet contains all rows that satisfy the conditions of an SQL statement and provides access to the data in these rows by a set of get methods that allow access to the different columns of the rows. The ResultSet.next method is used to move to the next row of the result set, making it the current row.

Resultset Properties

• getMetaData ()
• Obtain Objects: getObject ()
• Indexes of the columns: findColumn ()

  4.    RECOMENDACIONES

Siempre debemos tener en cuenta  de  la metadata de un objeto ResultSet se utiliza el método getMetaData(), para obtener la cantidad de columnas se utiliza el método getColumnCount() de la metadata, para obtener el nombre de la columna se utiliza el método getColumnName(i) de la metadata, para obtener la etiqueta de la columna se utiliza el método getColumnLabel (i) de la metadata.


  5.    CONCLUSIONES

ü  Este trabajo tiene como objetivo brindar una idea clara sobre la clase ResultSet para un buen proyecto que nosotros desarrollemos  lo mas importante es que se utiliza para procesar un resultado
ü  También  nos conocer sus propiedades y su  definición de ResultSet y las
diferentes características que se utilizan a través de esta clase.
  
  6.    APRECIACIÓN DEL EQUIPO

El hacer esta investigación sobre el Objeto ResultSet nos ayudado mucho porque entendimos como utilizar las características más nuevas de JDBC y así hacer un buen proyecto con un resultado excelente y no tener dificultades al desarrollarlo



  7.    GLOSARIO DE TÉRMINOS

Interfaz: Dispositivo capaz de transformar las señales generadas por un aparato en señales comprensibles por otro.
Fragmento: Parte o pedazo, generalmente irregular, de una cosa partida o quebrada.
"los fragmentos de un glaciar; de este tipo de bóvedas quedan fragmentos"

Array: Los arrays son usados extensamente por los programadores para contener listas de datos en la memoria, por ejemplo, los datos almacenados en un disco suelen leerse y ponerse dentro de un array con el objetivo de facilitar la manipulación de dichos datos.

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.

Query: Consulta

Portabilidad: Acción de trasladar el número de teléfono celular o móvil de una compañía de telefonía a otra.

  8. LINKOGRAFIA






AQUI LES DEJO EL LINK DE LAS DIAPOSITIVAS

















No hay comentarios:

Publicar un comentario