Problema para recuperar dados do banco e jogar na JTable

Meu código:

[code]Multa multa = new Multa();
Infracao infracao = new Infracao();

				gt.buscaMulta(txtcnh.getText());

				String[] dados = new String[7];      
				dados[0] = multa.getId();     
				dados[1] = infracao.getPlaca();
				dados[2] = multa.getMulta();
				dados[3] = infracao.getLocal();
				dados[4] = infracao.getData();
				dados[5] = multa.getPontos();
				dados[6] = multa.getValor();
				
				mdl1.addRow(dados);[/code]

[code]public void buscaMulta(String cnh) throws SQLException, ClassNotFoundException{

	BD.Conectar();
	
	PreparedStatement stmt;
	ResultSet rs;
	
	Multa multa = new Multa();
	Infracao infracao = new Infracao();

	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()){
		
		String id = rs.getString("cod");     
		String placa = rs.getString("placa");
		String desc = rs.getString("descr");
		String local = rs.getString("local");
		String data = rs.getString("data");
		String pontos = rs.getString("pont");
		String valor = rs.getString("valor");
				
		multa.setId(id);
		infracao.setPlaca(placa);
		multa.setMulta(desc);
		infracao.setLocal(local);
		infracao.setData(data);
		multa.setPontos(pontos);
		multa.setValor(valor);						
	}

}[/code]

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.

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?

[quote=Edenilton Fr?s]Sugiro que você estude um pouco sobre AbstractTableModel. Você não vai se arrepender.

abraço.[/quote]

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.

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?

[quote=Edenilton Fr?s]Sugiro que você estude um pouco sobre AbstractTableModel. Você não vai se arrepender.

abraço.[/quote]

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.[/quote]

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-

Realmente, que vacilo meu. Preciso retornar uma lista.

Obrigado! ^^

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:

[code]public TMultas() throws ClassNotFoundException, SQLException{

	f.setTitle("Todas as multas");
	f.setSize(500,500);
	f.addWindowListener(this);
	
	ArrayList<Multa> multa = new ArrayList<Multa>();
	CustomTableModel mdl = new CustomTableModel(multa);
	JTable table = new JTable(mdl);
	JScrollPane scr = new JScrollPane(table);
					
	GerenciadorMulta gm = new GerenciadorMulta();

	gm.mostraTodos();
	
	p.setLayout(new FlowLayout());
	p.add(scr);

	f.add(p);
	f.setVisible(true);
	

}

[/code]

[code]public ArrayList mostraTodos() throws SQLException, ClassNotFoundException{

	BD.Conectar();

	PreparedStatement stmt;
	ResultSet rs;
	stmt = BD.con.prepareStatement("SELECT * FROM cadmultas");
	rs = stmt.executeQuery();
	ArrayList<Multa> multas = new ArrayList<Multa>();
	
	while(rs.next()){
		
		String id = rs.getString("id_multa");      
		String cod = rs.getString("cod"); 
		String descricao = rs.getString("descr");
		String pena = rs.getString("pena");
		String pontos = rs.getString("pont");
		String gravidade = rs.getString("grav");
		String valor = rs.getString("valor");

		Multa multa = new Multa(id, cod, descricao, pena, pontos, gravidade, valor);
		multas.add(multa);
	}

	return multas;
}[/code]

[code]public class CustomTableModel extends AbstractTableModel {

private ArrayList<Multa> list = new ArrayList<Multa>();
private String[] columns={"ID", "Cod", "Infração", "Pena", "Pont.", "Gravidade", "Valor"};

public int getRowCount() {
	return list.size();
}

public int getColumnCount() {
	return columns.length;
}

public String getColumnName(int col) {
	return columns[col];
}

public CustomTableModel() {

}

public CustomTableModel(ArrayList<Multa> l) {
	list.addAll(l);
} 

public Multa removeWidgetAt(int row) {
	return (Multa)list.remove(row);
}

private Multa getWidgetAt(int row) {
	return (Multa)list.get(row);
} 

public Object getValueAt(int row, int col) {
	Multa widget = (Multa) list.get(row);
	switch (col) {
	case 0:
		return String.valueOf(widget.getId());
	case 1:
		return String.valueOf(widget.getCod());
	case 2:
		return String.valueOf(widget.getMulta());
	case 3:
		return String.valueOf(widget.getPena());
	case 4:
		return String.valueOf(widget.getPontos());
	case 5:
		return String.valueOf(widget.getGravidade());
	case 6:
		return String.valueOf(widget.getValor());
	default:
		return null;
	}

}

}[/code]

[code]public class GerenciadorMulta {

public ArrayList<Multa> mostraTodos() throws ClassNotFoundException, SQLException{
	DAOMulta Daomulta = new DAOMulta();
	return Daomulta.mostraTodos();
}

}[/code]

Me ajudem, por favor. :frowning:

Tá quase…

Substitua o trecho

          ArrayList<Multa> multa = new ArrayList<Multa>();  
         CustomTableModel mdl = new CustomTableModel(multa);  
         JTable table = new JTable(mdl);  
         JScrollPane scr = new JScrollPane(table);  
                           
         GerenciadorMulta gm = new GerenciadorMulta();  
   
         gm.mostraTodos();  

por:

         GerenciadorMulta gm = new GerenciadorMulta();        
         ArrayList<Multa> multa =  gm.mostraTodos(); 
         CustomTableModel mdl = new CustomTableModel(multa);  
         JTable table = new JTable(mdl);  
         JScrollPane scr = new JScrollPane(table);  

Aí é só correr para o abraço (eu espero)

Funcionou! :smiley:

Obrigado.

Cara,

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.

Abraço.