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
-------- --------- --------
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);
}
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 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);
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()
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()
Obtención de valores: getXXX()
public
abstract tipoJava getXXX(int indiceColumna) throws
SQLException
public abstract tipoJava getXXX(String nombreColumna) 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()
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()
Obtención de Objetos: getObject()
public abstract Object getObject(int indiceColumna) throws
SQLException
public abstract Object getObject(int nombreColumna) 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()
Í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