publicvoidbuscaMulta(Stringcnh)throwsSQLException,ClassNotFoundException{BD.Conectar();PreparedStatementstmt;ResultSetrs;Multamulta=newMulta();Infracaoinfracao=newInfracao();stmt=BD.con.prepareStatement("SELECT c.cod, a.placa, c.descr, i.local, i.data, c.pont, c.valor FROM titular t, infracoes i, cadmultas c, carro a WHERE t.cnh like ? AND t.cnh = a.cnh AND a.placa = i.placa AND i.id_multa = c.id_multa");stmt.setString(1,cnh);rs=stmt.executeQuery();while(rs.next()){Stringid=rs.getString("cod");Stringplaca=rs.getString("placa");Stringdesc=rs.getString("descr");Stringlocal=rs.getString("local");Stringdata=rs.getString("data");Stringpontos=rs.getString("pont");Stringvalor=rs.getString("valor");multa.setId(id);infracao.setPlaca(placa);multa.setMulta(desc);infracao.setLocal(local);infracao.setData(data);multa.setPontos(pontos);multa.setValor(valor);}}
Os dados simplesmente não aparecem. Teste a query no banco e está correta.
Cara, no seu while você cria as multas mas não as adiciona em lugar nenhum.
Você tem duas variáveis chamadas ‘multa’. Estás usando uma para preencher com os dados do banco e outra para colocar na jtable.
Sugiro que você estude um pouco sobre AbstractTableModel. Você não vai se arrepender.
abraço.
alomurilo
Adicionei nas instâncias das classes Multa e Infracoes com os Sets.
Mas os códigos são de classes diferentes, não preciso instanciar duas vezes?
Edenilton Fr?s:
Sugiro que você estude um pouco sobre AbstractTableModel. Você não vai se arrepender.
abraço.
Na verdade, acredito que o problema não seja na tabela em si. Fiz uns testes e também não consegui recuperar os dados em um JTextField.
Obrigado pela ajuda.
E
Edenilton_Fr_s
Adicionei nas instâncias das classes Multa e Infracoes com os Sets.
Mas os códigos são de classes diferentes, não preciso instanciar duas vezes?
Edenilton Fr?s:
Sugiro que você estude um pouco sobre AbstractTableModel. Você não vai se arrepender.
abraço.
Na verdade, acredito que o problema não seja na tabela em si. Fiz uns testes e também não consegui recuperar os dados em um JTextField.
Obrigado pela ajuda.
1- Por mais que você “set” os valores, ao final do while você terá apenas uma multa (Mesmo que a consulta retorne mais). Se está certo de que a consulta retornará apenas uma multa, “tudo bem”. Mas se vc quer todas as multas, deve criar uma lista e adicionar a cada iteração do while.
2- Você poderia fazer com que seu método buscaMulta() retorne uma ou uma lista de multas. Aí na chamada ao método você recuperaria a(s) multa(s) retornada(s).
3- abraço.
3-
alomurilo
Realmente, que vacilo meu. Preciso retornar uma lista.
Obrigado! ^^
alomurilo
Ainda estou tendo problemas. Joguei os dados em um ArrayList, mas não consigo resgatar na JTable. Não estou usando DefaultTableModel pois não quero que apontem para mim na rua.
Segue os códigos:
publicTMultas()throwsClassNotFoundException,SQLException{
f.setTitle("Todas as multas");f.setSize(500,500);f.addWindowListener(this);ArrayList<Multa>multa=newArrayList<Multa>();CustomTableModelmdl=newCustomTableModel(multa);JTabletable=newJTable(mdl);JScrollPanescr=newJScrollPane(table);GerenciadorMultagm=newGerenciadorMulta();gm.mostraTodos();p.setLayout(newFlowLayout());p.add(scr);f.add(p);f.setVisible(true);}
publicArrayList<Multa>mostraTodos()throwsSQLException,ClassNotFoundException{BD.Conectar();PreparedStatementstmt;ResultSetrs;stmt=BD.con.prepareStatement("SELECT * FROM cadmultas");rs=stmt.executeQuery();ArrayList<Multa>multas=newArrayList<Multa>();while(rs.next()){Stringid=rs.getString("id_multa");Stringcod=rs.getString("cod");Stringdescricao=rs.getString("descr");Stringpena=rs.getString("pena");Stringpontos=rs.getString("pont");Stringgravidade=rs.getString("grav");Stringvalor=rs.getString("valor");Multamulta=newMulta(id,cod,descricao,pena,pontos,gravidade,valor);multas.add(multa);}returnmultas;}
Fazer funcionar não é o problema. O importante é que você tenha entendido o que precisava fazer.
Entenda que uma simples chamada a um método que retorna “algo” não é suficiente para atribuir o valor desse “algo” à uma variável criada anteriormente.