opa pessoal… td bom??
eu to com um problema que não consigo resolver…
eu tenho que listar alguns pedidos de acordo com o q o usuario queira…
pra isso criei um bean chamado pedido com slguns objetos q eu tb criei beans deles…
a estrutura ficou assim :
PEDIDO
- HEADER
alguns fields Strings aki
- ITEM
alguns fields Strings aki
- RATEIO
alguns fields Strings aki
- TEXTO
alguns fields Strings aki
eu efetuo a pesquisa e varro o resultSet preenchendo um objeto Pedido e depois coloco em uma List… está rodando sem erros…
mas cada vez q eu vou pegar o registro seguinte e adiciono na List, os registros anteriores ficam iguais…
alguém pode me ajudar ae??
....
List<PedidoBean> pedidoList = new ArrayList<PedidoBean>();
Connection conn = ConnectionFactory.getConexao();
PreparedStatement stmt = conn.prepareStatement(sqldao.getQueryPedidos());
ResultSet rs = stmt.executeQuery();
while (rs.next()) {
PedidoBean pedido = new PedidoBean();
// seta header
pedido.setHeader(new HeaderBean()); // parametros do header sao todos fixos
// seta item
ItemDao itemdao = new ItemDao();
pedido.setItem(itemdao.getItem(rs));
// seta rateio
RateioDao rateiodao = new RateioDao();
pedido.setRateio(rateiodao.getRateio(rs));
// seta texto
TextoBean texto = new TextoBean();
texto.setConteudo("teste");
pedido.setTexto(texto);
pedidoList.add(pedido);
}
.....
:shock:
provavelmente é algum erro bobo ou detalhe q eu não estou vendo…
Olá,
Em qual momento no seu código você está passando para o próximo elemento do seu ResultSet? Não vi nada nesse trecho que você postou. Pode ser que esteja aí o problema, pois ele está pegando sempre o mesmo elemento.
[]´s
Tatiana
ele está passando por todos os elementos sim… pois eu dei um system.out.println nos dados antes de adicionar ao list… e está batendo com os dados q eu puxei do banco…
ele está mudando de posição quando eu dou um rs.next() na condição do looping…
está parecendo q ele continua mantendo a referência aos objetos… pois todos mudam juntos e de acordo com os dados do ultimo adicionado a lista…
Olá,
Foi mal! To literalmente dormindo aqui 
Bom, experimente trocar os parâmetros de entrada dos métodos DAO: itemdao.getItem e rateiodao.getRateio para os tipos concretos realmente utilizados na cláusula WHERE; como por exemplo, String, Integer, Double, etc.
Você não deve passar o ResultSet como parâmetro para outros métodos de outras classes, porque isso pode acarretar problemas como travamento da conexão com o BD. Via de regra, o ResultSet deve ser utilizado no menor escopo possível.
[]´s
Tatiana
hehehe… sussa…
itemdao.getItem e rateiodao.getRateio são metodos q capturam os dados do resultSet e jogam no meu objeto… ficaria muita coisa no loop… ai eu separei o código… vou tentar colocar tudo junto…
continua a mesma coisa…
mudar isso só complicou mais a visualização… e ficou fora de padrão…
valeww Tatiana
… mas infelizmente não funcionou… 
tente isso:
while (rs.next()) {
PedidoBean pedido = new PedidoBean();
// seta header
pedido.setHeader(new HeaderBean()); // parametros do header sao todos fixos
// seta item
ItemDao itemdao = new ItemDao();
pedido.setItem(itemdao.getItem(rs));
// seta rateio
RateioDao rateiodao = new RateioDao();
pedido.setRateio(rateiodao.getRateio(rs));
// seta texto
TextoBean texto = new TextoBean();
texto.setConteudo("teste");
pedido.setTexto(texto);
pedidoList.add(pedido);
pedido = null; <<-------------------- AQUI --------------------------
}
opa Luiz… blz?
então… eu tentei setar null pra ele, mas não adiantou nada…
até tentei usar o synchrinized… mas não obtive sucesso…
já não sei mais o q fazer… estou há 1 dia e meio tentando resolver isso…

putz… q coisa !!!
era pra estar funcionando…
tenta declarar o PedidoBean fora do while… e dentro do while só crie a nova instância.
abaixo um exemplo de como ficaria (e mais algumas dicas, se me permite):
PedidoBean pedido = null;
// eu acredito que você só precise criar uma isnstância das DAOs, antes do while
ItemDao itemdao = new ItemDao();
RateioDao rateiodao = new RateioDao();
while (rs.next()) {
pedido = new PedidoBean();
// seta header
pedido.setHeader(new HeaderBean()); // parametros do header sao todos fixos
// seta item
pedido.setItem(itemdao.getItem(rs));
// seta rateio
pedido.setRateio(rateiodao.getRateio(rs));
// seta texto
TextoBean texto = new TextoBean();
texto.setConteudo("teste");
pedido.setTexto(texto);
pedidoList.add(pedido);
pedido = null; <<-------------------- AQUI --------------------------
}
do mais tá tudo certo, era pra estar funcionando…
tenta aí e vamos tentando arrumar o trem 
pois é…hehehhe essa doidera viu!! 
depois o pessoal não sabe pq q programador envelhece mais cedo hehehehe
opa… claro q permito… ajuda é sempre bem vinda…
eu acho q o problema não é na List pq eu tentei com Set e com array e em todos ele muda…
eu vou tentar agora as dicas q vc passou… já já eu posto…
tomara q seja isso…

não funcionou… 
ele mantem o mesmo comportamento quando eu to debugando…
ele atualiza todos os registros da list e do array…
toda vez q ele adiciona um outro elemento ele muda em todos os existentes…
eu tentei setar null para todos beans no final do looping tb e instancia-los de novo no começo do looping… mas sem sucesso…
ahhhhhhhhhhhh
eu achei que o objeto repetido era o PedidoBean, mas não é 
o PedidoBean está sendo mudado, só o objeto RateioBean que não.
pode Mandar o código da classe RateioDao (ou pelo menos do método rateiodao.getRateio(rs))?
vamos achar essa solução já já!!
[]'s
Aliás, ItemBean tb tá dando pau…
eis o trecho problemático… made as classes ou métodos se puder!
// seta item
pedido.setItem(itemdao.getItem(rs));
// seta rateio
pedido.setRateio(rateiodao.getRateio(rs));
vc quer o codigo só do metodo q efetua o preenchimento da list ou dos beans tb??
creio q dos Beans não precisa não
só os métodos das DAOs… por enquanto 
se o problema estiver fora dos métodos aí eu te peço o código da classe.
[]'s
public class PedidoDAO {
public PedidoBean getPedido (Filtro filtro) {
PedidoBean pedido = new PedidoBean();
return pedido;
}
public List<PedidoBean> getList(Filtro filtro) throws SQLException, ParseException {
List<PedidoBean> pedidoList = new ArrayList<PedidoBean>();
PedidoBean [] pedids = null;
pedids = new PedidoBean [10]; // setei 10 para testar somente... sao muito mais registros q vem do banco
SqlDao sqldao= new SqlDao();
Connection conn = ConnectionFactory.getConexao();
sqldao.setFiltro(filtro); // dados fornecidos pelo usuario para efetuar a pesquisa
PreparedStatement stmt = conn.prepareStatement(sqldao.getQueryPedidos());
ResultSet rs = stmt.executeQuery();
PedidoBean pedido = null;
ItemDao itemdao = null;
RateioDao rateiodao = null;
TextoBean texto = null;
int chave = 0;
synchronized (this) { // mesmo sincronizando nao mudou nada...
while (rs.next()) {
pedido = new PedidoBean();
itemdao = new ItemDao();
rateiodao = new RateioDao();
texto = new TextoBean();
// seta header
pedido.setHeader(new HeaderBean()); // parametros do header sao todos fixos
// seta item
//ItemDao itemdao = new ItemDao();
pedido.setItem(itemdao.getItem(rs));
// seta rateio
//RateioDao rateiodao = new RateioDao();
pedido.setRateio(rateiodao.getRateio(rs));
// seta texto
//TextoBean texto = new TextoBean();
texto.setConteudo("teste");
pedido.setTexto(texto);
// Ambos ocorre o mesmo comportamento
pedids[chave] = pedido; // teste com Array
chave++;
pedidoList.add(pedido); // teste com List
pedido = null;
itemdao = null;
rateiodao = null;
texto = null;
}
}
if (rs != null) {
rs.close();
rs = null;
}
if (stmt != null) {
stmt.close();
stmt = null;
}
if (conn != null) {
ConnectionFactory.ReleaseConnection(conn);
conn = null;
}
return pedidoList; // retorna lista com todos os pedidos...
}
}
public class PedidoBean {
private HeaderBean header;
private ItemBean item;
private RateioBean rateio;
private TextoBean texto;
// getters e setters
}
public class HeaderBean {
private String header = "H"; // fixo
private String fornecedor = "3489"; // fixo
private String grupoCompras = "OC01"; // fixo
private String grupoCompradores = "902"; // fixo
private String empresa = "AZB"; // fixo
// getters e setters
}
public class ItemBean {
private String item = "I"; // fixo
private String texto = "Passagem aérea"; // fixo
private String quantidade = "1"; // fixo
private String dataRemessa = null;
private Double preco = null;
private String grupoMercadorias = "32"; // fixo
private String centro = "CE01"; // fixo
private String contrato = "4600000305"; // fixo
private String linha = "10"; // fixo
// getters e setters
}
public class RateioBean {
private String rateio = "R"; // fixo
private String porcentagem = null;
private String centroCusto = null;
private String contaRazao = "56121507"; // fixo
private String ordem = null;
private String elementoPEP = null;
private String localDescarga = "SFV"; // fixo
private String recebedor = "Cristiane"; // fixo
// getters e setters
}
public class TextoBean {
private String texto = "T";
private String conteudo = null;
// getters e setters
}
public class ItemDao {
private static ItemBean item = new ItemBean();
public ItemBean getItem(ResultSet rs) throws SQLException, ParseException {
// setando date da remessa
//item.setDataRemessa(Conversores.parseToCalendar(rs.getString("DATEMI")));
item.setDataRemessa(rs.getString("DATEMI"));
// setando o total
Double taxa = rs.getDouble("TAXA");
Double tarifa = rs.getDouble("TARIFA");
Double desconto = rs.getDouble("DESCONTO");
Double preco = taxa + tarifa - desconto;
item.setPreco(preco);
return this.item;
}
}
public class RateioDao {
private static RateioBean rateio = new RateioBean();
public RateioBean getRateio(ResultSet rs) throws SQLException, ParseException {
rateio.setPorcentagem("100");
rateio.setCentroCusto(rs.getString("CENTROC"));
rateio.setOrdem(rs.getString("CODET3"));
rateio.setElementoPEP(rs.getString("CODET2"));
return this.rateio;
}
}