Inicio > ADF / Java > ADF tips: ¿Este View Object tiene resultados?

ADF tips: ¿Este View Object tiene resultados?

En este breve tip comentaremos los diferentes métodos para saber si un View Object tiene o no resultados en un determinado momento.

Existe el método ViewObjectImpl.getEstimatedRowCount() que internamente hará uso del método getQueryHitcount(), que a su vez envolverá la query del View Object bajo un select count(*) y nos devolverá un objeto de tipo long con el número de filas.

long numeroFilas = myViewObject.getEstimatedRowCount();

Otro método es el ViewObject.getRowCount(), que recorrerá todas y cada una de las filas haciendo uso del método next() para saber cuántas filas hay en ese momento. Como bien parece, el uso de este método puede ocasionar graves problemas de rendimiento en caso de que el View Object tenga un número elevado de registros.

int numeroFilas = myViewObject.getRowCount();

Si hacemos caso a los manuales oficiales, y a la mayoría de recomendaciones, el método más óptimo es getEstimatedRowCount(), pero en la práctica este método también puede ocasionarnos algún problema de rendimiento. Por ejemplo, si invocamos a este método en un View Object cuya sentencia tiene un coste muy elevado (acceso a una tabla de varios millones de registros), puede llegar a ocasionar problemas de rendimiento en nuestra aplicación.

La mayoría de veces hacemos uso de estos métodos para comprobar si hay o no resultados en un View Object, bien tras ejecutar una consulta o bien a la entrar a una pantalla por primera vez. Para evitar posibles problemas de rendimiento debemos pensar formas alternativas para comprobar si tenemos o no resultados. La forma más simple es comprobar si el método first() devuelve un resultado o no.

boolean hayUnaFila = myViewObject.first() != null;

Esta misma idea podemos aplicarla a otros escenarios, como puede ser contar si una consulta sólo nos ha devuelto 1 resultado o por el contrario ha devuelto 2 o más filas. Podemos acceder al iterador del ViewObject y, una vez posicionados en el primer elemento, el método hasNext() nos dirá si tenemos 2 resultados o simplemente 1.

RowSetIterator myIterator = myViewObject.createRowSetIterator(null);
boolean hayUnafila = myIterator.first() != null;
myIterator.next();
boolean hayAlMenosDosFilas = myIterator.hasNext();
myIterator.closeRowSetIterator();
Categorías:ADF / Java Etiquetas: , , ,
  1. Aún no hay comentarios.
  1. No trackbacks yet.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: