12
Ingeniería de Sistemas y Telemática TEMA: ResulSet DOCENTE: Marco Aurelio Porro Chulli. INTEGRANTES: Erlin Darwin Herrera Cieza. Yosmer Aguilar Cabrera. CICLO:V Bagua Grande - Utcubamba

Presentación result set

Embed Size (px)

Citation preview

Page 1: Presentación result set

Ingeniería de Sistemas y TelemáticaTEMA: ResulSetDOCENTE:Marco Aurelio Porro Chulli.INTEGRANTES:Erlin Darwin Herrera Cieza.Yosmer Aguilar Cabrera.CICLO:V Bagua Grande - Utcubamba

Page 2: Presentación result set

DEFINICION

Un ResultSet contiene todas las filas que satisfacen las condiciones de unasentencia SQL y proporciona el acceso a los datos de estas filas mediante unconjunto 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.

Sintaxisjava.sql.Statement stmt = conn.createStatement();ResultSet r = stmt.executeQuery("SELECT nombre de los campos FROM Table1");while (r.next()){int i = r.getInt("a");String s = r.getString("b");float f = r.getFloat("c");System.out.println("ROW = " + i + " " + s + " " + f);}

Page 3: Presentación result set

Filas y CursoresUn 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.

Page 4: Presentación result set

ColumnasLos métodos getXXX suministran los medios para recuperar los valores de lascolumnas de la fila actúal. Dentro de cada fila, los valores de las columnas puedenrecuperarse en cualquier orden.Puede usarse o bien el nombre de la columna o el número de columna parareferirse a esta. Por ejemplo: si la columna segunda de un objeto RecordSet rs sedenomina “title” y almacena valores de cadena, cualquiera de los dos ejemplossiguientes 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 lacolumna 1. Además los nombres usados como input en los métodos getXXX soninsensibles a las mayúsculas.

Page 5: Presentación result set

Tipos de datos y conversiones.Para los métodos getXXX, el driver JDBC intenta convertir los datos subyacentes atipos de datos Java . Por ejemplo, si el método getXXX es getString y los tipos dedatos de la base de datos en la base subyacente es VARCHAR, el driver JDBCconvertirá VARCHAR en String de Java. El valor devuelto por getString será unobjeto Java de tipo String.

Por ejemplo, cualquier método getXXX excepto getBytes o getBinaryStream puedeusarse para recuperar valores de tipo LONGVARCHAR, pero se recomienda usargetAsciiStream o getUnicodeStream, dependiendo de que tipo de dato se devuelve.

Page 6: Presentación result set

La siguiente tabla muestra que tipos JDBC está permitido devolver para un métodogetXXX y que tipos JDBC (tipos genéricos de SQL) se recomiendan pararecuperarlos. Una x indica un método getXXX legal para un tipo de dato particular.

 Uso de Streams valores muy grandes de filas

Page 7: Presentación result set

Valores resultado NULLPara 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 JDBC NULL

Un valor null de Java para aquellos métodos getXXX que devuelven objetosJava (tales como getString, getBigDecimal, getBytes, getDate,getTime,getTimestamp,getAsciiStream, getUnicodeStream,getBinaryStream,getObjet).

Un valor cero para getByte, getShort, getInt, getLong,getFloat y getDouble

Un valor false para getBoolean.

Page 8: Presentación result set

Soporte de ResultSetMetaDataCuando 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);

Page 9: Presentación result set

Características de ResultSetPor defecto, el tipo de todos los ResultSets creados es solo de reenvío, la concurrencia es solo de lectura y los cursores se retienen en los límites del compromiso. Una excepción de ello la presenta WebSphere, que actualmente cambia el valor predeterminado de la capacidad de retención de cursores para que los cursores se cierren implícitamente al comprometerse. Estas características pueden configurarse mediante los métodos accesibles en objetos Statement, PreparedStatement y CallableStatement.

Page 10: Presentación result set

Tipos de ResultSet

TYPE_FORWARD_ONLYUn cursor que solo puede utilizarse para procesar desde el principio de un ResultSet hasta el final del mismo. Este es el tipo por omisión.

TYPE_SCROLL_INSENSITIVEUn cursor que se puede emplear para desplazares a través de un ResultSet. Este tipo de cursor es insensible a los cambios efectuados en la base de datos mientras está abierto.

TYPE_SCROLL_SENSITIVUn cursor que puede utilizarse para el desplazamiento en diversas formas a través de un ResultSet. Este tipo de cursor es sensible a los cambios efectuados en la base de datos mientras está abierto.E

Nota: las propiedades de agrupación por bloques habilitada y de conexión de tamaño de bloque afectan al grado de sensibilidad de un cursor TYPE_SCROLL_SENSITIVE. La agrupación por bloques mejora el rendimiento al almacenar en caché datos de la propia capa del controlador JDBC.

Page 11: Presentación result set

ConcurrenciaLa concurrencia determina si el ResultSet puede actualizarse. Los tipos se definen de nuevo mediante constantes de la interfaz ResultSet.

CONCUR_READ_ONLY

Un ResultSet que solo puede utilizarse para leer datos de la base de datos. Este es el valor predeterminado.

CONCUR_UPDATEABLE

Un ResultSet que permite efectuar cambios en el mismo. Estos cambios pueden colocarse en la base de datos subyacente.

Nota: Según la especificación JDBC, el controlador JDBC puede cambiar el tipo de ResultSet del valor de concurrencia de ResultSet si los valores no pueden utilizarse conjuntamente

Page 12: Presentación result set

Capacidad de retenciónLa característica de capacidad de retención determina si la llamada al compromiso en el objeto Connection cierra el ResultSet. La API de JDBC destinada a trabajar con la característica de capacidad de retención es nueva en la versión 3.0. Sin embargo, el controlador JDBC nativo ha proporcionado una propiedad de conexión para varios releases que le permite especificar ese valor predeterminado para todos los ResultSets creados bajo la conexión

HOLD_CURSOR_OVER_COMMITTodos los cursores abiertos permanecen así cuando se llama a la cláusula commit. Este es el valor predeterminado del controlador JDBC nativo.

CLOSE_CURSORS_ON_COMMITTodos los cursores abiertos se cierran cuando se llama a la cláusula commit.

Nota: Al llamar a la retrotracción en una conexión, siempre se cierran todos los cursores abiertos. Este es un hecho poco conocido, pero es una forma común de que las bases de datos manejen los cursores.