Classe com estrutura bidimensional

7 respostas
F

Olá,



Quero fazer uma busca em banco de dados e retornar os dados em uma estrutura como de uma tabela. A classe java.sql.ResultSet já tem essa estrutura bidimensional (linhas e colunas), mas não é legal retornar um ResultSet no nome de uma função. Vector e Enumeration são lineares, então não serviria. Alguém conhece alguma classe assim, ou tem alguma sugestão?



Obrigado,



Adriano.

7 Respostas

A

Eu sugiro vc retornar um collection contendo beans, o que acha?

É simples e rápido.



[]´s



A
Quote:


11/03/2003 - 16:24, ferlin wrote:

Olá,



Quero fazer uma busca em banco de dados e retornar os dados em uma estrutura como de uma tabela. A classe java.sql.ResultSet já tem essa estrutura bidimensional (linhas e colunas), mas não é legal retornar um ResultSet no nome de uma função. Vector e Enumeration são lineares, então não serviria. Alguém conhece alguma classe assim, ou tem alguma sugestão?



Obrigado,



Adriano.






Por que não se deve retornar um ResultSet em uma função?



André
A
Quote:


11/03/2003 - 16:43, andrers2b wrote:

Quote:


11/03/2003 - 16:24, ferlin wrote:

Olá,



Quero fazer uma busca em banco de dados e retornar os dados em uma estrutura como de uma tabela. A classe java.sql.ResultSet já tem essa estrutura bidimensional (linhas e colunas), mas não é legal retornar um ResultSet no nome de uma função. Vector e Enumeration são lineares, então não serviria. Alguém conhece alguma classe assim, ou tem alguma sugestão?



Obrigado,



Adriano.






Por que não se deve retornar um ResultSet em uma função?



André




Até poderia retornar sim, mas segundo as técnicas de programação de gosling, não é recomendável o fechamento de um statement através de um resultset, a não seja que você queira manter seu statement vivo :slight_smile:

Em últimos casos, o retorno por um rs, funcionaria tranquilamente…



[]´s

F

O correto é utilizar uma Collecton com Java Beans, abstraindo as tabelas do Banco, os famosos DBObjects. Nada que já não tenha sido dito antes.

O que é comum de se ver (principalmente qdo há um curtíssimo prazo para entrega do projeto), é uma HashTable populada com os dados do ResultSetMetaData. Desta maneira não é necessário criar cada Bean DBObject, e a mesma estrutura sere para qualque querie.

Mas, é de longe a solução mais porca de todas.



Se precisar de um exemplo, fale.



F

Retornar em ResultSet permitiria a manipulação dos dados da base (por exemplo, através dos métodos rowDeleted() ou rowInsert() ) no escopo de outra classe… Queria evitar isso.

Sei (ou pelo menos acho) que a melhor escolha seria manipular os dados com beans/collection, mas ainda não estou familiarizado com eles. A idéia parece boa. Vou estudar isso. Se alguém tiver um exemplo simples pra facilitar minha vida, eu agradeço.

t+

A
Quote:


11/03/2003 - 17:44, Franklin wrote:

O correto é utilizar uma Collecton com Java Beans, abstraindo as tabelas do Banco, os famosos DBObjects. Nada que já não tenha sido dito antes.

O que é comum de se ver (principalmente qdo há um curtíssimo prazo para entrega do projeto), é uma HashTable populada com os dados do ResultSetMetaData. Desta maneira não é necessário criar cada Bean DBObject, e a mesma estrutura sere para qualque querie.

Mas, é de longe a solução mais porca de todas.



Se precisar de um exemplo, fale.






Franklin, poderia me passar alguma referência dos DBObjects? Um exemplo da 2a solução tb seria bem vinda!



Desde já agradeço!



André



God is real, unless declared integer!



ps: Editada, pois eu não sei soletrar! :-?

[ Esta mensagem foi editada por: andrers2b em 12-03-2003 15:06 ]
J

método que retorna um collection

public Collection obterIncidentesOcorridos(String local){

ConectaBanco con = new ConectaBanco();

ResultSet rs = null;
Collection result = new ArrayList();
	try{
		
		rs = con.stm.executeQuery("select i.cod_incidente, i.data_incidente from incidente i, funcionario f where f.matricula = i.matricula_fk and f.local = \""+local+"\" and status_incidente = 'ocorrido'");
		
		while (rs.next()){
			Incidente incidente = new Incidente();
			incidente.setCodIncidente(Integer.parseInt(rs.getString("cod_incidente")));
			incidente.setDataIncidente(rs.getTimestamp("data_incidente"));
			
			result.add(incidente);
		}
	}catch (SQLException e){
		
	}
	
	return result;
}

trecho do código que pega os dados do collection

if (resultIncidente.size()>0){

Iterator it1 = resultIncidente.iterator();

while (it1.hasNext()){

Incidente listaIncidente = (Incidente)it1.next();

funcionario = funcionario.obterDadosFunc(listaIncidente.getFuncionario().getMatricula());

Criado 11 de março de 2003
Ultima resposta 26 de dez. de 2006
Respostas 7
Participantes 5