RESULTSET
1. CONTENIDO
1.1. Definición
En la lista siguiente se resumen las propiedades del objeto ResultSet:
1.2.1. MaxMultiLineTextLength
Identificador
Description
resultset
Un objeto ResultSet que representa las filas y las columnas de datos resultantes de una consulta.
max_length
Un valor Long que especifica la longitud máxima actual en bytes de datos obtenidos de un campo de texto de varias líneas.
Valor de retorno
Devuelve un valor Long que contiene la longitud máxima actual en bytes de datos obtenidos de un campo de texto de varias líneas.
Ejemplo:
1.2.2. MaxResultSetRows
Devuelve el recuento de registros (número de filas) del conjunto de resultados.
SINTAXIS
Identificador
Description
resultset
Un objeto ResultSet que representa las filas y las columnas de datos resultantes de una consulta.
limit
Un valor Long que especifica el límite de filas devueltas en ResultSet.
Valor de retorno
Devuelve un valor Long que contiene el límite para el número de filas devueltas en ResultSet.
Ejemplo:
1.2.3. RercordCount
Identificador
Description
resultset
Un objeto ResultSet que representa las filas y las columnas de datos resultantes de una consulta.
Valor de retorno
Un valor Long que contiene el número de registros del conjunto de resultados.
Ejemplo:
1.3.1. Ejemplo 01
Manipulación del Datos del objeto Resultset en Java
1.3.2. Ejemplo 02
Consulta sql utilizando el objeto Resultset
Este es un ejemplo de cómo utilizar la interfaz ResultSet.
4. RECOMENDACIONES
5. CONCLUSIONES
8. LINKOGRAFÍA
https://msdn.microsoft.com/es-es/library/ms228700(v=vs.90).aspx
http://www.myjavazone.com/2012/08/resultset.html
http://www.w3api.com/wiki/Java:ResultSet.next()
http://www.programacionfacil.com/java_windows/resultset.html
http://cursodejava.com.mx/cursodejava206.html
http://www.chuidiang.org/java/mysql/ResultSet-DataBase-MetaData.php
http://www.euskalnet.net/jaoprogramador/j2ee/JDBC/jdbc18.htm
http://profesores.fi-b.unam.mx/sun/Downloads/Java/jdbc.pdf
http://www.euskalnet.net/jaoprogramador/j2ee/JDBC/jdbc18.htm
http://eolo.cps.unizar.es/java/JDBC/resultset.html
1.1. Definición
Es la representación en memoria de las tablas de la base de
datos en disco, se puede entender como una tabla virtual, recordar que
generalmente todos los procesos que se realizen con la tabla (insertar
registros, eliminar registros, etc) se realizaran realmente contra un resulset
y no provocaran ningun cambio en la tabla fisica en disco, resulset tiene un
conjunto de metodos muy utiles y muy usados para el proceso de los renglones de
la tabla virtual.
Puede utilizar un objeto ResultSet para ejecutar una
consulta y examinar los resultados de la consulta.
Cuando crea consultas por medio del objeto QueryDef, debe
crear un objeto ResultSet correspondiente para ejecutar la consulta y obtener
los resultados. Cada objeto ResultSet se personaliza para la consulta que se
ejecuta. El objeto ResultSet contiene estructuras de datos que organizan los
datos de la consulta en filas y columnas, donde cada fila representa un único
registro de datos y cada columna representa un campo del registro de datos.
Después de ejecutar la consulta, puede navegar (moverse) fila a fila y columna
a columna, para obtener los datos que desea.
Tenga en cuenta que:
Las columnas están numeradas de (1 a N), no de (0 a N-1).
Una vez que se haya generado el conjunto de resultados, es
posible que necesite rellenar valores de parámetro, si se trata de una consulta
con parámetros.
Una vez que se haya generado el conjunto de resultados y se
hayan establecido los parámetros (si procede), la puede ejecutar para ver la
salida de la consulta. Se permite ejecutar el conjunto de resultados varias
veces, si se desea volver a ejecutar la consulta. (Es posible que haya borrado
y restablecido los valores de parámetro). También se permite obtener el SQL
para la consulta.
Conceptualmente, una consulta puede generar tanta salida que
puede resultar imposible o, incluso, inútil copiarla sólo de la base de datos
en la memoria del programa. Por ello, se debe utilizar un "cursor"
para navegar a través de la salida, utilizando el método MoveNext.
Inmediatamente después de ejecutar el conjunto de
resultados, el cursor se sitúa "justo antes" del primer elemento, de
modo que se debe llamar a MoveNext para poder extraer el primer valor.
Para obtener el valor una vez que se haya colocado en la
posición adecuada, utilice el método GetColumnValue.
Hoy veremos que es y como podemos usar un objeto ResultSet,
como ya vimos anteriormente, un objeto Connection realiza la conexiona a la
Base de Datos y con ayuda de un objeto Statement realiza consultas, entre otras
sentencias, dichas consultas nos devuelven un conjunto de resultados, estos
resultados son almacenados en un objeto tipo ResultSet, el cual veremos en el
dia de hoy.
Una vez obtenido el objeto ResultSet procedemos a extraer la
informacion que obtuvimos de la consulta a la Base de Datos, para hacer esto
hacemos uso de los metodos y funciones del objeto ResultSet tales como next(),
first(), last(), etc, que nos sirve para movernos entre las diferentes filas
del conjunto de resultados.
Adicionalmente esta clase nos ofrece una gran variedad de
metodos para obtener los valores de los campos del conjunto de resultados
obtenidos por la consulta que se realizo, por ejemplo si necesitamos obtener un
valor entero, tenemos el metodo getInt(), con dos vaiantes la primer getInt(int
x) donde x es el numero de la columna de la consulta retornada o getInt(String
nombre) donde nombre es el nombre de la columna de la consulta retornada. De
esta forma obtenemos el valor almacenado en esa columna para la fila actual.
Luego pasamos a la siguiente fila usando el metodo next() y asi hasta que no
hayan mas filas.
Un ejemplo de como podemos usar un objeto ResultSet es:
import java.sql.*;
import java.util.Properties;
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();
}
De esta forma vemos como
podemos obtener los valores devueltos por la consulta, y ademas vimos como
obtener dicho valor conociendo el numero de la columna o el nombre de la
columna. Usamos un loop, en este caso while, para ir recorriendo fila a fila
todo el objeto ResultSet e ir sacando el nombre y el apellido de todos los
registros obtenidos a partir de la consulta.
1.2. PropiedadesEn la lista siguiente se resumen las propiedades del objeto ResultSet:
1.2.1. MaxMultiLineTextLength
Obtiene o establece el
límite actual de datos que se pueden capturar para un campo de texto de varias
líneas.
Es útil si los
resultados incluyen uno o más campos que contienen una entrada de texto larga,
de varias líneas, y existe la posibilidad de que al capturar los datos se
produzca un desbordamiento del espacio de almacenamiento intermedio. También
resulta útil si se desea examinar los resultados y obtener mejor rendimiento.
De forma predeterminada,
no existe límite para la longitud de los datos obtenidos de un campo de texto
de varias líneas.
Puede restablecer el
valor predeterminado estableciendo el parámetro de longitud en cero (0).
El límite se aplica a
los campos de serie cortos así como también a los campos de texto de varias
líneas. Un campo de serio corto puede tener 254 caracteres, de forma que puede
establecer un límite para ello.
SINTAXIS
import java.sql.*;
import java.util.Properties;
resultset.MaxMultiLineTextLength
resultset.MaxMultiLineTextLength max_length
Ejemplo:
import java.sql.*;
import java.util.Properties;
$queryDefObj = $SessionObj->BuildQuery("Defect");
$queryDefObj->BuildField("description");
$queryDefObj->BuildField("id");
$resultSetObj = $SessionObj->BuildResultSet($queryDefObj);
$resultSetObj->SetMaxMultiLineTextLength(5);
# Not setting the above max multiline text length
# or setting it to 0 will fetch the entire data of
# the long varchar column
$resultSetObj->Execute();
$status = $resultSetObj->MoveNext();
$i=0;
while ($status == 1) {
$xnote = $resultSetObj->GetColumnValue(1);
print $i++,". desc=",$xnote,"\n";
$entyObj = $SessionObj->GetEntity( "defect",
$resultSetObj->GetColumnValue(2));
$SessionObj->EditEntity($entyObj,"modify");
$entyObj->SetFieldValue("headline","testXXX".($i));
$retval = $entyObj->Validate();
$entyObj->Commit();
$status = $resultSetObj->MoveNext();
}
1.2.2. MaxResultSetRows
Establece o devuelve el
límite inicial sobre el número de registros devuelto en un conjunto de
resultados.
El valor de
MaxResultSetRows es el valor del límite inicial que limita el número de filas
en ResultSet. Los clientes pueden alterar temporalmente el límite inicial,
siempre que el valor del límite inicial no sea menor que el límite final o
absoluto. Cuando el valor de MaxResultSetRows es 0, se utiliza el límite
absoluto.
RecordCountDevuelve el recuento de registros (número de filas) del conjunto de resultados.
SINTAXIS
resultset.MaxResultSetRows resultset.MaxResultSetRows limit
Ejemplo:
import java.sql.*;
import java.util.Properties;
# limit a ResultSet to 10000 rows
my $CQWorkSpace = $CQSession->GetWorkSpace();
my $qry = $CQWorkSpace->GetQueryDef("Public Queries/Some Big Query");
my $ResultSet = $CQSession->BuildResultSet($qry);
$ResultSet->SetMaxResultSetRows(10000);
$ResultSet->Execute();
1.2.3. RercordCount
Devuelve el recuento de
registros (número de filas) del conjunto de resultados.
Para obtener un recuento
de registros, en primer lugar debe utilizar EnableRecordCount para habilitar el
recuento de filas y, a continuación, debe llamar a RecordCount (GetRecordCount,
para Perl) para obtener el número de registros.
SINTAXIS
resultset.RecordCount
Ejemplo:
import java.sql.*;
import java.util.Properties;
Set ResultSet = cqSession.BuildResultSet(qrydef)
ResultSet.EnableRecordCount
ResultSet.Execute
count = ResultSet.RecordCount
1.3. Ejemplos1.3.1. Ejemplo 01
Manipulación del Datos del objeto Resultset en Java
import java.sql.*;
import java.util.Properties;
/**
* Método que recibe el código del Departamento y retorna un vector de tipo Empleado con los datos de éstos.
* @param idDepart Id del departamento del cual se desea extraer la información.
* @return Persona[]
Vector de Tipo Persona con los datos de los empleados pertenecientes al departamento.
* @throws java.lang.Exception En caso de cualquier error de ejecución.
*/
public static Emplado[] getEmpleadosX_Departamento( int idDepart ) throws Exception{
try{
/* Configuraciones de conexión. */
String DRIVER_SQL = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
String DRIVER_ORACLE = "oracle.jdbc.driver.OracleDriver";
Class.forName( /* Alguno de los dos anteriores. */ );
Connection Cnx = DriverManager.getConnection( /* String de conexión aquí. */ );
Cnx.setAutoCommit( true );
/* Ejecusión de la consulta. */
String strSQL = "SELECT cedula, nombre FROM tbEmpleados WHERE idDept = " + idDepart;
Statement stmt = Cnx.createStatement();
ResultSet rsltEmpleados = stmt.executeQuery( strSQL );
/*
Instanciasión de la Lista.
Como pueden observar al crear la lista se le indica que c/ítem
de la lista es de tipo Empleado.
*/
java.util.List listaEmpleados = new ArrayList();
/*
Se recorre cada fila del ResultSet para instancia a cada empleado y agregarlo a la lista de empleados.
*/
while( rsltEmpleados.next() ){
/* Se instancia del nuevo Empleado. */
Empleado tempEmpleado = new Empleado(
rsltEmpleados.getString( "cedula" ) ),
rsltEmpleados.getString( "nombre" ) )
);
/* Se agrega el empleado a la lista. */
listaEmpleados.add( tempEmpleado );
}
/* Cierre de la conexión con la BD. */
Cnx.close();
/*
Se retorna el contenido de la Lista pero convirtiéndola en vector de tipo Empleado ingresando un nuevo vector de tipo Empleado y esta vez si sabemos el tamaño trayendo el tamaño de la lista.
*/
return listaEmpleados.toArray( new Empleado[ listaEmpleados.size() ] );
}
catch( Exception err ){
throw new Exception(
"Error en getEmpleadosX_Departamento( int ).\nDetalle:\n + " + err.getMessage()
);
}
}
1.3.2. Ejemplo 02
Consulta sql utilizando el objeto Resultset
import java.sql.*;
import java.util.Properties;
ConsultasSQL.java
package visorconsultas.controlador;
import java.sql.Connection;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
public class ConsultaSQL {
private Connection conexion;
private ResultSet resultadoConsulta;
private ResultSetMetaData metaDatos;
private String consulta;
//Crea dos arreglos
private String[][] datosDevueltos;
private String [] nombresColumnas;
private String error;
public ConsultaSQL(Connection conRecibida, String consultaRecibida){
conexion=conRecibida;
consulta=consultaRecibida;
try {
//Crea una instancia para mandar sentencias al servidor MySQL
Statement sentencia=conexion.createStatement();
//Ejecuta la consulta y devuelve el ResultSet
resultadoConsulta=sentencia.executeQuery(consulta);
//Obtiene los metadatos del ResultSet
metaDatos=resultadoConsulta.getMetaData();
error=null;
}
catch (SQLException e) {
error=e.getMessage();
}
}
public String[][] getDatosDevueltos(){
if(error==null){
try {
//Devuelve el número de columnas del resultset
int columnas=metaDatos.getColumnCount();
//Lleva el cursor a la última fila del resultset
resultadoConsulta.last();
//Obtiene el número de fila actual( que aquí es la última)
int filas=resultadoConsulta.getRow();
//Dimensiona el arreglo datosDevueltos con los enteros obtenidos
datosDevueltos=new String[filas][columnas];
//Ubica el cursor antes del a primera fila
resultadoConsulta.beforeFirst();
for(int i=0;i
1.3.3. Ejemplo 03Este es un ejemplo de cómo utilizar la interfaz ResultSet.
import java.sql.*;
import java.util.Properties;
import java.sql.*;
/**
ResultSetExample.java
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).
**/
public class ResultSetExample {
public static void main(java.lang.String[] args)
{
if (args.length != 2) {
System.out.println("Uso: java ResultSetExample ");
System.out.println(" siendo la biblioteca que contiene la ");
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");
}
}
}
}
}
1.3.4. Ejemplo 04
import java.sql.*;
import java.util.Properties;
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 .
Cuando crea consultas por medio
del objeto QueryDef, debe crear un objeto ResultSet
correspondiente para ejecutar la consulta y obtener los resultados. Cada objeto
ResultSet se personaliza para la consulta que se ejecuta. El objeto ResultSet
contiene estructuras de datos que organizan los datos de la consulta en filas y
columnas, donde cada fila representa un único registro de datos y cada columna
representa un campo del registro de datos. Después de ejecutar la consulta,
puede navegar (moverse) fila a fila y columna a columna, para obtener los datos
que desea.
La
interfaz ResultSet proporciona métodos getter, getboolean,
getlong,ect.para recuperar valores de la columna de la fila actuallos valores
se pueden recuperar utilizando el índice de la columna o nombre.En general se
utiliza el índice de columna será mas eficiente.las columnas se enumeran desde
1 para una portabilidad máxima las
columnas de conjunto de resultados dentro de cada fila se debe leer en orden de
izquierda a derecha de cada columna debe lerse una sola vez.
para los
métodos ,getter un controlados jdbc intenta convertir los datossubyacentes al
tipo java es escificado en el
método getter y devuelve un valor java
adecuado
Pero para poder
hacer uso de estas novedosas características se debe crear un objeto ResultSet
adecuado, el tipo de ResultSet que permite realizar los movimientos antes
mencionados se denomina scrollable. 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’.
Propiedades
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.
3. SUMMARY
When you create queries using the QueryDef object, you must create
a corresponding ResultSet object to run the query and get the results. Each
ResultSet object is customized for the query that is executed. The ResultSet
object contains data structures that organize the query data into rows and
columns, where each row represents a single data record and each column
represents a field in the data record. After executing the query, you can
navigate (move) row by row and column by column, to get the data you want.
The ResultSet interface provides methods getter, getboolean,
getlong, ect.to retrieve values from the column of the current row, the
values can be retrieved using the index of the column or name.In general, the
column index will be used more efficiently. are listed from 1 for maximum
portability The result set columns within each row should be read in order from
left to right of each column should be read only once.
for the methods, getter a controlled jdbc tries to convert the
underlying data to the java type it is scripted in the getter method and
returns an appropriate java value
But to be able to make use of
these novel features, an appropriate ResultSet object must be created, the type
of ResultSet that allows performing the aforementioned movements is called
scrollable. The ResultSet.next method is used to move to the next row of the
result set, making it the current row. The general format of a result set is a
table with column headers and the corresponding values returned by the
'query'.
Properties
The properties of
the ResultSet object are summarized in the following list Property Name
Description
MaxMultiLineTextLength
Sets or returns the current data length limit obtained from a multi-line text
field. The limit applies to short series fields as well as multi-line text
fields. MaxResultSetRows Sets or returns the initial limit on the number of
records to be included in the result set when a query is executed.
RecordCount Returns
the count of records (number of rows) of the result set.
- Un objecto Statement se debe crear utilizando el método de connection créate Statement.
- solo se puede abrir a la vez el ResultSet por Statement
- Es necesario utilizar una referencia al a interfaz ResultSet para manipular los datos
- El Statement es el que genera el comando de ejecución
- Para los métodos de conexión se utiliza los siguientes parámetros Connection, Statement, ResultSet.
- El ResultSet apunta un registro de datos actuales
En los preliminares contenidos
hemos venido tratando temas relacionados a la conexión a una base de datos incluso
desarrollamos algunos objetos importantes tales como CONECTION Y STATEMENT en
esta oportunidad tratamos sobre otro
objeto que indispensable en el desarrollo de software, el Objeto Resultset.
De la misma manera podemos
indicar que gracia a la investigación más amplia que tuvimos con respecto a
trabajos anteriores aclaramos algunos interrogantes que teníamos sobre este
importante objeto (RESULTSET).
7. GLOSARIO DE TÉRMINOS
ResultSet: resultados de un query.
Conexión:
Línea de comunicación entre nuestro programa y el dbms
Row:
Un renglón (tupla) obtenidas de un query y que a su vez contiene las distintas
columnas (valores atributos) de dicha operación.
TRANSACCIÓN: Unidad
de programa que accede y posiblemente actualiza varios elementos de información
STATEMENT :
ejecuta a través de la conexión
RESULTSET
META DATA: información acerca de los resultados de un query, pero no
de los resultados en si.
DRIVER
MANAGER: Busca el JDBC driver correspondiente
INTERFACES JAVA: métodos de gestión de manejadores de
conexión hacia cada modelo específico de base de datos.
REUTILIZANDO: permite volver a utilizar los bienes o
productos desechados y darles un uso igual o diferente a aquel para el que
fueron concebidos.
JAVA
DATABASE CONNECTIVITY : más conocida por
sus siglas JDBC, es una API que permite la ejecución de operaciones sobre bases de datos
https://msdn.microsoft.com/es-es/library/ms228700(v=vs.90).aspx
http://www.myjavazone.com/2012/08/resultset.html
http://www.w3api.com/wiki/Java:ResultSet.next()
http://www.programacionfacil.com/java_windows/resultset.html
http://cursodejava.com.mx/cursodejava206.html
http://www.chuidiang.org/java/mysql/ResultSet-DataBase-MetaData.php
http://www.euskalnet.net/jaoprogramador/j2ee/JDBC/jdbc18.htm
http://profesores.fi-b.unam.mx/sun/Downloads/Java/jdbc.pdf
http://www.euskalnet.net/jaoprogramador/j2ee/JDBC/jdbc18.htm
http://eolo.cps.unizar.es/java/JDBC/resultset.html
Trabajo bien desarrollado. Muchas gracias por su aporte. Saludos
ResponderEliminar