"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
-------- --------- --------
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);
}
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.
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);
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");
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
diapositiva
https://www.slideshare.net/LUZCLARITAPEREZDIAZ/resultset-81265930

