Class DataReader<T>

java.lang.Object
br.com.intersys.systextil.connection.DataReader<T>
Type Parameters:
T - o tipo de objeto retornado em cada loop
All Implemented Interfaces:
Closeable, AutoCloseable, Iterable<T>, Iterator<T>

public class DataReader<T> extends Object implements Iterable<T>, Iterator<T>, Closeable
Um leitor de registros genérico que pode ser usado em loops "for-each". Para cada registro, retorna um objeto construído com o Maker informado. Se tentar ler um registro após o último, fecha o resultset.

A grande utilidade deste objeto é a de poder ler e permitir processar um registro por vez. Outras soluções requerem memorizar todos os registros antes de poder usá-los.

Um exemplo de uso possível deste objeto:

 AppConnection cn = new AppConnection(conn, SQL, params);
 cn.executeQuery();
 for(Tipo t : new DataReader(cn, Tipo.MAKER) {
     // Processar t...
 }
 

Em vez disso, a classe do Tipo pode retornar o DataReader pronto:

 public static DataReader<Tipo> readTipos(AppConnection conn, params...) {
     AppConnection cn = new AppConnection(conn, SQL, params);
     cn.executeQuery();
     return new DataReader(cn, MAKER);
 }
 
Author:
sergio
  • Constructor Details

    • DataReader

      public DataReader(AppConnection rs, Maker<T> maker)
      Constrói um leitor de registros.
      Parameters:
      rs - o resultset, posicionado antes do registro a ler
      maker - o construtor de objetos a partir de registros
  • Method Details

    • iterator

      public Iterator<T> iterator()
      Specified by:
      iterator in interface Iterable<T>
      Returns:
      este mesmo objeto
    • hasNext

      public boolean hasNext()
      Specified by:
      hasNext in interface Iterator<T>
    • next

      public T next()
      Specified by:
      next in interface Iterator<T>
    • remove

      public void remove()
      Não deve ser usado.
      Specified by:
      remove in interface Iterator<T>
      Throws:
      UnsupportedOperationException - pois não remove nada.
    • stream

      public Stream<T> stream()
      Fornece um Stream. Só pode ser usado uma vez em cada DataReader.
      Returns:
      o Stream
    • hasRecordsRead

      public boolean hasRecordsRead()
      Informa se foi lido algum registro.

      É conveniente ao fim de um loop para informar se o resultset tinha dados. Por exemplo:

       DataReader<Tipo> dr = new DataReader(cn, Tipo.MAKER);
       for(Tipo t : dr) {
           // Processar t...
       }
       if(!dr.hasRecordsRead()) {
           // Não havia dados...
       }
       int qt = dr.recordCount();
       
      Returns:
      se foi lido algum registro
    • recordCount

      public int recordCount()
      Informa quantos registros foram lidos até o momento.
      Returns:
      se foi lido algum registro
      See Also:
    • close

      public void close()
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface Closeable
    • main

      public static void main(String[] args) throws Exception
      Throws:
      Exception