Instanciar objetos a partir de uma consulta no BD

5 respostas
crpablo

Bom dia galerinha...

Eu estou com um probleminha aqui...

Estou fazendo uma consulta no banco de dados da seguinte maneira:
public List getDadosTabelas(String nomeTabela) {

		PreparedStatement ps = null;
		ResultSet rsPegaDados = null;
		List listaDados = new ArrayList();
		
		
		try {
			ps = getConnection()
					.prepareStatement("SELECT * FROM " + nomeTabela);

			rsPegaDados = ps.executeQuery();

            int qntColunas = getQuantidadeColunas(nomeTabela);

			while (rsPegaDados.next()) {
				for (int j = 0; j < qntColunas; j++) {
					listaDados.add(rsPegaDados.getString(j + 1));
				}
			}

			ps.close();
			getConnection().close();

		} catch (SQLException e) {
			e.printStackTrace();
		}
		return listaDados;
	}
Eu passo o nome da tabela para esse método e ele retorna uma lista com os dados da tabela. Nesta mesma classe tenho um método que retorna uma lista com todos os nomes das tabelas do meu BD, assim eu posso passar através de um laço todos os nomes das tabelas para me retornar todos os dados contidos nesse BD. Porém meu problema é o seguinte, eu preciso instanciar um novo objeto para cada tabela e assim setar esse objeto com os dados contidos na tabela. Sei que da seguinte forma é possível:
Clientes cliente = new Clientes();
			
			try {
				while (rsPegaDados.next()){
					cliente.setId(rsPegaDados.getInt(XXX));
					cliente.setIdade(rsPegaDados.getInt(XXX));
					cliente.setNome(rsPegaDados.getString(XXX));
				}
			} catch (SQLException e1) {
				e1.printStackTrace();
			}
			
			listaDados.add(cliente);

Mas eu preciso fazer isso para todas tabelas do meu BD, tipo, se o nome da tabela for USUARIO eu instancio um novo objeto da classe Usuario e seto ele com os dados da tabela, se for CLIENTE, instancio Cliente e assim em diante.

Alguém já precisou fazer isso? Alguma idéia? Sugestão?

5 Respostas

Giulliano

Cara eu acho q não dá pra fazer algo desse tipo…ficaria feio e fora de qq design pattern q eu conheça…

Acho q é mais fácil vc ter um DAO para cada tabela ou para cada negócio que precise persistir dados.

é legal a idéia de criar classes genéricas q trabalhem da mesma forma para qq situação…mas essa sua idéia “eu não aprovaria”…

cassio

Eu acho que você vai ter que usar Reflection e ter uma boa dose de convencões na maneira como nomeia suas classes.
Dê uma pesquisada sobre Reflection.

jgbt

Da para fazer com reflection, onde vc passaria o class que rertornaria e vc popularia ele de acordo.
mas o trabalho que daria não valeria a pena. mais facil usar o JDBCTemplate do spring ou algum ORM tipo hibernate.

[]´s

peerless

Cara isso é muito feio, mas da pra fazer, sim.

Talvez uma pitada de Reflection + metadados.

Mas, você pode ter muita dor de cabeça… isso, ao contrário do que você pensa, não vai ficar um “Generico” muito interessante.

Como o amigo mais acima falou, utilize o pattern: DAO

e, veja se não é possível colocar no projeto um framework o/r, como o hibernate, por exemplo.

abçs

crpablo

Valeu ae galera… Dei uma olhada no reflection, mas vou deixar pra dar uma estudada nisso depois, por enquanto vou optar pelos DAOs mesmo…

Abraço e feliz 2008 pra todos!!!

Criado 28 de dezembro de 2007
Ultima resposta 28 de dez. de 2007
Respostas 5
Participantes 5