Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare una empresa de Scribd logo
RESULTSET
PROF: MARCO AURELIO PORRO CHULLI
INTEGRANTES:
ING: SISTEMAS Y TELEMATICA
 AARON DELGADO ESPARRAGA
 FIORELLA AGUILAR ISUIZA
RESULTSET:
Es el objeto que, proporciona varios métodos para obtener los datos de columna correspondientes a
una fila.
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 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
Filas y Cursores:
Un ResultSet mantiene un cursor que apunta a la fila actual de datos. El cursor se mueve una fila hacia abajo
cada vez que se llama al método next. Inicialmente se sitúa antes de la primera fila, por lo que hay que llamar al
método next para situarlo en la primera fila convirtiéndola en la fila actual. 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.
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.
PROPIEDAD DEL RESULSET
En la lista siguiente se resumen las propiedades del objeto ResultSet:
Nombre de propiedad
Descripción
 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.
En la lista siguiente se resumen los métodos del objeto ResultSet:
Nombre de método
AddParamValue : Asigna uno o más valores a un parámetro.
ClearParamValues: Borra todos los valores asociados a un parámetro.
EnableRecordCount: Habilita el recuento de registros para el conjunto de resultados.
Execute:Ejecuta la consulta y rellena el conjunto de resultados con datos.
ExecuteAndCountRecords: Ejecuta la consulta, rellena el conjunto de resultados con datos y devuelve el
recuento de registros (número de filas) del conjunto de resultados.
ExecuteAndSave: Ejecuta una consulta y guarda el conjunto de resultados como un archivo.
GetAllColumnValues:Devuelve todos los valores de columna del conjunto de resultados.
Valores resultado NULL. Para determinar si un valor resultado dado es JDBC NULL, primero debe
intentarse leer la columna y usar el método ResultSet.wasNull para descubrir si el valor devuelto es
NULL Cuando se ha leido un JDBC NULL usando uno de los métodos ResultSet.getXXX, el método
devuelve algo de lo siguiente: • Un valor null de Java para aquellos métodos getXXX que devuelven
objetos Java (tales como getString, getBigDecimal, getBytes, getDate, getTime, getTimestamp,
getAsciiStream, getUnicodeStream, getBinaryStream, getObject). • Un valor cero para getByte,
getInt, getLong, getFloat y getDouble. • Un valor false para getBoolean.
Result sets opcionales o múltiples.
Normalmente cuando se ejecuta una sentencia SQL o bien se usa excuteQuery (que devuelve un único
ResultSet) o bien executeUpdate (que puede usarse para cualquier tipo de sentencia de modificación de
base de datos y que devuelve un contador de las filas que han sido afectadas. De cualquier modo, bajo
ciertas circunstancias una aplicación puede no saber si una sentencia devolverá un result set hasta que
no haya sido ejecutada. Además, ciertos procedimientos almacenados pueden devolver varios result sets
y/o update counts. Para acomodarse a estas situaciones, JDBC provee de un mecanismo por el cual una
aplicación puede ejecutar una sentencia y luego procesar una colección arbitraria de result sets y update
counts. Este mecanismo se basa en una primera llamada a un método general execute y luego llamar a
otros tres métodos getResultSet, getUpdateCount y getMoreResults. Estos métodos permiten a una
aplicación explorar los resultados de las sentencias y determinar si dan como resultado un result set o un
update count. 35 No se necesita hacer nada para cerrar un ResultSet. Se cierra automáticamente cuando
por la Statement que la crea cuando se cierra esta, y se reutiliza cuando cuando se recupera el próximo
resultado de una secuencia de múltiples resultados.
Ejemplo: crear un procedimiento con múltiples ResultSets
public class CallableStatementExample1 {
public static void main(java.lang.String[] args) {
// Registrar el controlador JDBC nativo. Si no podemos
// registrar el controlador, la prueba no puede continuar.
try {
Class.forName("com.ibm.db2.jdbc.app.DB2Driver");
// Crear las propiedades de la conexión
Properties properties = new Properties ();
properties.put ("user", "userid");
properties.put ("password", "password");
// Conectar con la base de datos del servidor local
Connection c = DriverManager.getConnection("jdbc:db2://*local", properties);
Statement s = c.createStatement();
// Crear un procedimiento con múltiples ResultSets.
String sql = "CREATE PROCEDURE MYLIBRARY.SQLSPEX1 " +
"RESULT SET 2 LANGUAGE SQL READS SQL DATA SPECIFIC MYLIBRARY.SQLSPEX1 " +
"EX1: BEGIN " +
" DECLARE C1 CURSOR FOR SELECT * FROM QSYS2.SYSPROCS " +
" WHERE SPECIFIC_SCHEMA = 'MYLIBRARY'; " +
" DECLARE C2 CURSOR FOR SELECT * FROM QSYS2.SYSPARMS " +
" WHERE SPECIFIC_SCHEMA = 'MYLIBRARY'; " +
" OPEN C1; " +
" OPEN C2; " +
" SET RESULT SETS CURSOR C1, CURSOR C2; " +
"END EX1 ";
try {
s.executeUpdate(sql);
} catch (SQLException e) {
// NOTA: Aquí ignoramos el error. Hacemos la
// suposición de que el único motivo de que esto falle
// se debe a que el procedimiento ya existe. Otros
// motivos de que falle son que el compilador C
// no se encuentre para para compilar el procedimiento
// o que la colección MYLIBRARY no existe en el sistema.
}
s.close();
// Ahora, utilizar JDBC para ejecutar el procedimiento y obtener los resultados. En
// este caso, vamos a obtener información sobre los procedimientos de'MYLIBRARY'
// (que es también donde creamos este procedimiento, para así
// estar seguros de que haya algo que obtener.
CallableStatement cs = c.prepareCall("CALL MYLIBRARY.SQLSPEX1");
ResultSet rs = cs.executeQuery();
// Ahora tenemos el primer objeto ResultSet que el procedimiento almacenado
// dejó abierto. Hay que utilizarlo.
int i = 1;
while (rs.next()) {
System.out.println("Procedimiento almacenado de MYLIBRARY
" + i + " es " + rs.getString(1) + "." +
rs.getString(2));
i++;
}
System.out.println("");
// Ahora, obtener el siguiente objeto ResultSet del sistema - el anterior
// se ha cerrado automáticamente.
if (!cs.getMoreResults()) {
System.out.println("Algo ha fallado. Debería haber
habido otro ResultSet, hay que salir.");
System.exit(0);
}
rs = cs.getResultSet();
// Ahora tenemos el segundo objeto ResultSet que el procedimiento almacenado
// dejó abierto. Hay que utilizarlo.
i = 1;
while (rs.next()) {
System.out.println("Procedimiento de MYLIBRARY " + rs.getString(1)
+ "." + rs.getString(2) +
" parámetro: " + rs.getInt(3) + " dirección:
" + rs.getString(4) +
" tipo de datos: " + rs.getString(5));
i++;
}
if (i == 1) {
System.out.println("Ninguno de los procedimientos almacenados tiene parámetros.");
}
if (cs.getMoreResults()) {
System.out.println("Algo ha fallado,
no debe haber otro ResultSet.");
System.exit(0);
}
cs.close(); // cerrar el objeto CallableStatement.
c.close(); // cerrar el objeto Connection.
} catch (Exception e) {
System.out.println("Algo ha fallado...");
System.out.println("Razón: " + e.getMessage());
e.printStackTrace();
}
}
Resulset

Más contenido relacionado

Resulset

  • 1. RESULTSET PROF: MARCO AURELIO PORRO CHULLI INTEGRANTES: ING: SISTEMAS Y TELEMATICA  AARON DELGADO ESPARRAGA  FIORELLA AGUILAR ISUIZA
  • 2. RESULTSET: Es el objeto que, proporciona varios métodos para obtener los datos de columna correspondientes a una fila. 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 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
  • 3. Filas y Cursores: Un ResultSet mantiene un cursor que apunta a la fila actual de datos. El cursor se mueve una fila hacia abajo cada vez que se llama al método next. Inicialmente se sitúa antes de la primera fila, por lo que hay que llamar al método next para situarlo en la primera fila convirtiéndola en la fila actual. 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.
  • 4. 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.
  • 5. PROPIEDAD DEL RESULSET En la lista siguiente se resumen las propiedades del objeto ResultSet: Nombre de propiedad Descripción  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.
  • 6. En la lista siguiente se resumen los métodos del objeto ResultSet: Nombre de método AddParamValue : Asigna uno o más valores a un parámetro. ClearParamValues: Borra todos los valores asociados a un parámetro. EnableRecordCount: Habilita el recuento de registros para el conjunto de resultados. Execute:Ejecuta la consulta y rellena el conjunto de resultados con datos. ExecuteAndCountRecords: Ejecuta la consulta, rellena el conjunto de resultados con datos y devuelve el recuento de registros (número de filas) del conjunto de resultados. ExecuteAndSave: Ejecuta una consulta y guarda el conjunto de resultados como un archivo. GetAllColumnValues:Devuelve todos los valores de columna del conjunto de resultados.
  • 7. Valores resultado NULL. Para determinar si un valor resultado dado es JDBC NULL, primero debe intentarse leer la columna y usar el método ResultSet.wasNull para descubrir si el valor devuelto es NULL Cuando se ha leido un JDBC NULL usando uno de los métodos ResultSet.getXXX, el método devuelve algo de lo siguiente: • Un valor null de Java para aquellos métodos getXXX que devuelven objetos Java (tales como getString, getBigDecimal, getBytes, getDate, getTime, getTimestamp, getAsciiStream, getUnicodeStream, getBinaryStream, getObject). • Un valor cero para getByte, getInt, getLong, getFloat y getDouble. • Un valor false para getBoolean.
  • 8. Result sets opcionales o múltiples. Normalmente cuando se ejecuta una sentencia SQL o bien se usa excuteQuery (que devuelve un único ResultSet) o bien executeUpdate (que puede usarse para cualquier tipo de sentencia de modificación de base de datos y que devuelve un contador de las filas que han sido afectadas. De cualquier modo, bajo ciertas circunstancias una aplicación puede no saber si una sentencia devolverá un result set hasta que no haya sido ejecutada. Además, ciertos procedimientos almacenados pueden devolver varios result sets y/o update counts. Para acomodarse a estas situaciones, JDBC provee de un mecanismo por el cual una aplicación puede ejecutar una sentencia y luego procesar una colección arbitraria de result sets y update counts. Este mecanismo se basa en una primera llamada a un método general execute y luego llamar a otros tres métodos getResultSet, getUpdateCount y getMoreResults. Estos métodos permiten a una aplicación explorar los resultados de las sentencias y determinar si dan como resultado un result set o un update count. 35 No se necesita hacer nada para cerrar un ResultSet. Se cierra automáticamente cuando por la Statement que la crea cuando se cierra esta, y se reutiliza cuando cuando se recupera el próximo resultado de una secuencia de múltiples resultados.
  • 9. Ejemplo: crear un procedimiento con múltiples ResultSets public class CallableStatementExample1 { public static void main(java.lang.String[] args) { // Registrar el controlador JDBC nativo. Si no podemos // registrar el controlador, la prueba no puede continuar. try { Class.forName("com.ibm.db2.jdbc.app.DB2Driver"); // Crear las propiedades de la conexión Properties properties = new Properties (); properties.put ("user", "userid"); properties.put ("password", "password"); // Conectar con la base de datos del servidor local Connection c = DriverManager.getConnection("jdbc:db2://*local", properties); Statement s = c.createStatement(); // Crear un procedimiento con múltiples ResultSets. String sql = "CREATE PROCEDURE MYLIBRARY.SQLSPEX1 " + "RESULT SET 2 LANGUAGE SQL READS SQL DATA SPECIFIC MYLIBRARY.SQLSPEX1 " + "EX1: BEGIN " +
  • 10. " DECLARE C1 CURSOR FOR SELECT * FROM QSYS2.SYSPROCS " + " WHERE SPECIFIC_SCHEMA = 'MYLIBRARY'; " + " DECLARE C2 CURSOR FOR SELECT * FROM QSYS2.SYSPARMS " + " WHERE SPECIFIC_SCHEMA = 'MYLIBRARY'; " + " OPEN C1; " + " OPEN C2; " + " SET RESULT SETS CURSOR C1, CURSOR C2; " + "END EX1 "; try { s.executeUpdate(sql); } catch (SQLException e) { // NOTA: Aquí ignoramos el error. Hacemos la // suposición de que el único motivo de que esto falle // se debe a que el procedimiento ya existe. Otros // motivos de que falle son que el compilador C // no se encuentre para para compilar el procedimiento // o que la colección MYLIBRARY no existe en el sistema. } s.close();
  • 11. // Ahora, utilizar JDBC para ejecutar el procedimiento y obtener los resultados. En // este caso, vamos a obtener información sobre los procedimientos de'MYLIBRARY' // (que es también donde creamos este procedimiento, para así // estar seguros de que haya algo que obtener. CallableStatement cs = c.prepareCall("CALL MYLIBRARY.SQLSPEX1"); ResultSet rs = cs.executeQuery(); // Ahora tenemos el primer objeto ResultSet que el procedimiento almacenado // dejó abierto. Hay que utilizarlo. int i = 1; while (rs.next()) { System.out.println("Procedimiento almacenado de MYLIBRARY " + i + " es " + rs.getString(1) + "." + rs.getString(2)); i++; } System.out.println(""); // Ahora, obtener el siguiente objeto ResultSet del sistema - el anterior // se ha cerrado automáticamente. if (!cs.getMoreResults()) { System.out.println("Algo ha fallado. Debería haber habido otro ResultSet, hay que salir."); System.exit(0); } rs = cs.getResultSet(); // Ahora tenemos el segundo objeto ResultSet que el procedimiento almacenado // dejó abierto. Hay que utilizarlo. i = 1; while (rs.next()) { System.out.println("Procedimiento de MYLIBRARY " + rs.getString(1) + "." + rs.getString(2) + " parámetro: " + rs.getInt(3) + " dirección: " + rs.getString(4) + " tipo de datos: " + rs.getString(5)); i++; } if (i == 1) { System.out.println("Ninguno de los procedimientos almacenados tiene parámetros."); } if (cs.getMoreResults()) { System.out.println("Algo ha fallado, no debe haber otro ResultSet."); System.exit(0); } cs.close(); // cerrar el objeto CallableStatement. c.close(); // cerrar el objeto Connection. } catch (Exception e) { System.out.println("Algo ha fallado..."); System.out.println("Razón: " + e.getMessage()); e.printStackTrace(); } }