JTDS-Acessar o mesmo ResultSet para recuperar duas colunas

7 respostas
R

Fala pessoal,

seguinte...eu tenho um método

Vector<String> getColumn(ResultSet rs,String col)

que pega um ResultSet e um nome de coluna e retorna um Vetor de Strings com os registros relativos à coluna.

Quando tento fazer:

Vector<String> coluna_cod_grupo= this.getDb().getColumn(rs,PosicaoConst.COLUNA_CODIGO_GRUPO_ATIVO);

Vector<String> coluna_cod= this.getDb().getColumn
(rs,PosicaoConst.COLUNA_CODIGO_ATIVO);

, onde rs é um ResultSet, tenho um probleminha; parece que não posso utilizar o mesmo ResultSet para isso.

Como eu contorno este problema?

[]'s a todos,
Rafael March.

7 Respostas

T

Crie um outro método, que obtenha várias colunas. Ele poderia ser algo como:

List < List < String > > getColumns (ResultSet rs, String[] columns)

A vantagem de fazer isso é que você não fica andando sobre o ResultSet (uma operação custosa) repetidamente.

R

É…já tinha pensado nisso…

Mas é uma boa prática, isso que estou fazendo ? Um método para passar uma coluna para um Vector ? As pessoas fazem isso na prática ?

[]'s a todos,
Rafael M.

T

Se você usasse o Hibernate veria que o que ele costuma fazer é retornar um List de objetos que representam as linhas da consulta (query).

Você está aprendendo a usar Java ou está tendo de fazer um sistema?

R

Tendo que fazer um sistema…

pode aproveitar o gancho do tópico pra me convencer PORQUE utilizar o Hibernate ? Já ouvi falar bastante, mas não conheço direito suas funcionalidades…

[]'s a todos,
Rafael M.

T

Eu acho que uma das vantagens do Hibernate é que ele deixa seus sistemas mais orientados a objeto. Em vez de você se preocupar com essas coisas (resultsets etc.) você se preocupa com listas de objetos.

sergiotaborda

O resultSet é um iterador e como tal ele não se reseta. Quando vc executa a primeira pesquisa ele fica na ultima posição. Quando vc manda busca a segunda vez ele não encontra nada porque já está no fim da lista. Pense no ResultSet com um cursor. Para funcionar vc precisa resetar para o inicio. Em alternativa vc pode ler todas as colunas que quiser de uma só fez. Isso é mais eficiente porque libera o ResultSet mais depressa e só o faz iterar uma vez. Se usar essa tecnica existem forma de dizer ao driver que o resultset é “foward-only” e torna o acesso ainda mais eficiente. O thingol deu a ideia de uma lista de listas e deixo a ideia de uma lista de map

public List<Map<String,Object>> readColumns( ResultSet rs , String[] columnNames){

  List <Map<String,Object>> result  = new ArrayList<Map<String,Object>>();

  while (rs.next()){

       for (String columnName : columnNames){
          Map<String,Object> map = new TreeMap<String,Object>();
          map.put(columnName, rs.getObject(columnName));
          
           result.add(map);
      }
  }
  return result;
}
R

Valeu pessoal,

comprei a idéia da lista de maps…

[]'s a todos,
Rafael March.

Criado 13 de junho de 2008
Ultima resposta 16 de jun. de 2008
Respostas 7
Participantes 3