provavelmente é algum erro bobo ou detalhe q eu não estou vendo…
H
henriqueor
alguém??
tatianaesc
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
H
henriqueor
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…
tatianaesc
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
H
henriqueor
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…
H
henriqueor
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…
Luiz_Gustavo
tente isso:
while(rs.next()){
PedidoBeanpedido=newPedidoBean();//setaheaderpedido.setHeader(newHeaderBean()); // parametros do header sao todos fixos//setaitemItemDaoitemdao=newItemDao();pedido.setItem(itemdao.getItem(rs));//setarateioRateioDaorateiodao=newRateioDao();pedido.setRateio(rateiodao.getRateio(rs));//setatextoTextoBeantexto=newTextoBean();texto.setConteudo("teste");pedido.setTexto(texto);pedidoList.add(pedido);pedido=null; <<-------------------- AQUI --------------------------}
H
henriqueor
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…
Luiz_Gustavo
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):
PedidoBeanpedido=null;//euacreditoquevocêsóprecisecriarumaisnstânciadasDAOs,antesdowhileItemDaoitemdao=newItemDao();RateioDaorateiodao=newRateioDao();while(rs.next()){
pedido=newPedidoBean();//setaheaderpedido.setHeader(newHeaderBean()); // parametros do header sao todos fixos//setaitempedido.setItem(itemdao.getItem(rs));//setarateiopedido.setRateio(rateiodao.getRateio(rs));//setatextoTextoBeantexto=newTextoBean();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
H
henriqueor
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…
H
henriqueor
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…
vc quer o codigo só do metodo q efetua o preenchimento da list ou dos beans tb??
Luiz_Gustavo
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
H
henriqueor
publicclassPedidoDAO{publicPedidoBeangetPedido(Filtrofiltro){PedidoBeanpedido=newPedidoBean();returnpedido;}publicList<PedidoBean>getList(Filtrofiltro)throwsSQLException,ParseException{List<PedidoBean>pedidoList=newArrayList<PedidoBean>();PedidoBean[]pedids=null;pedids=newPedidoBean[10];// setei 10 para testar somente... sao muito mais registros q vem do bancoSqlDaosqldao=newSqlDao();Connectionconn=ConnectionFactory.getConexao();sqldao.setFiltro(filtro);// dados fornecidos pelo usuario para efetuar a pesquisaPreparedStatementstmt=conn.prepareStatement(sqldao.getQueryPedidos());ResultSetrs=stmt.executeQuery();PedidoBeanpedido=null;ItemDaoitemdao=null;RateioDaorateiodao=null;TextoBeantexto=null;intchave=0;synchronized(this){// mesmo sincronizando nao mudou nada...while(rs.next()){pedido=newPedidoBean();itemdao=newItemDao();rateiodao=newRateioDao();texto=newTextoBean();// seta headerpedido.setHeader(newHeaderBean());// 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 comportamentopedids[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;}returnpedidoList;// retorna lista com todos os pedidos...}}
publicclassPedidoBean{privateHeaderBeanheader;privateItemBeanitem;privateRateioBeanrateio;privateTextoBeantexto;// getters e setters}
publicclassHeaderBean{privateStringheader="H";// fixoprivateStringfornecedor="3489";// fixoprivateStringgrupoCompras="OC01";// fixoprivateStringgrupoCompradores="902";// fixoprivateStringempresa="AZB";// fixo// getters e setters}
publicclassRateioBean{privateStringrateio="R";// fixoprivateStringporcentagem=null;privateStringcentroCusto=null;privateStringcontaRazao="56121507";// fixoprivateStringordem=null;privateStringelementoPEP=null;privateStringlocalDescarga="SFV";// fixoprivateStringrecebedor="Cristiane";// fixo// getters e setters}
publicclassTextoBean{privateStringtexto="T";privateStringconteudo=null;// getters e setters}
H
henriqueor
publicclassItemDao{privatestaticItemBeanitem=newItemBean();publicItemBeangetItem(ResultSetrs)throwsSQLException,ParseException{// setando date da remessa//item.setDataRemessa(Conversores.parseToCalendar(rs.getString("DATEMI")));item.setDataRemessa(rs.getString("DATEMI"));// setando o totalDoubletaxa=rs.getDouble("TAXA");Doubletarifa=rs.getDouble("TARIFA");Doubledesconto=rs.getDouble("DESCONTO");Doublepreco=taxa+tarifa-desconto;item.setPreco(preco);returnthis.item;}}
com membros estáticos, toda mudança que você fizer no Bean afeta todas as referências dele, qualquer que seja o objeto fazendo uso.
tente isso:
publicclassItemDao{privateItemBeanitem=null;publicItemBeangetItem(ResultSetrs)throwsSQLException,ParseException{item=newItemBean();// setando date da remessa//item.setDataRemessa(Conversores.parseToCalendar(rs.getString("DATEMI")));item.setDataRemessa(rs.getString("DATEMI"));// setando o totalDoubletaxa=rs.getDouble("TAXA");Doubletarifa=rs.getDouble("TARIFA");Doubledesconto=rs.getDouble("DESCONTO");Doublepreco=taxa+tarifa-desconto;item.setPreco(preco);returnitem;}}