Boa noite, venho fazendo alguns projetos esses dias de OO, e gostaria de exibir os Veículos que meus Clientes(caso eles possuam algum), porém, na hora da exibição na jTable, ela dá exceção de “Index = 0, Size = 0”
minha classe básica:
import java.util.ArrayList;
import veiculo.Veiculo;
/**
*
* @author Matheus Prado
*/
public class Cliente {
private ArrayList<Veiculo> veiculos;
private String cpfCliente;
private String nome;
private String telefoneCliente;
public Cliente() {
this.veiculos = new ArrayList<>();
}
public ArrayList<Veiculo> getVeiculos() {
return veiculos;
}
public void setVeiculos(ArrayList<Veiculo> veiculos) {
this.veiculos = veiculos;
}
public String getCpfCliente() {
return cpfCliente;
}
public void setCpfCliente(String cpfCliente) {
this.cpfCliente = cpfCliente;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getTelefoneCliente() {
return telefoneCliente;
}
public void setTelefoneCliente(String telefoneCliente) {
this.telefoneCliente = telefoneCliente;
}
}
Meu método da classe de dados para realizar a pesquisa:
@Override
public ArrayList<Cliente> listarCliente(Cliente filtro) throws Exception, SQLException {
int pos = 1;
ArrayList<Cliente> retorno = new ArrayList<>();
//instrução sql correspondente a inserção do aluno
String sql = " SELECT c.cpf, c.nome, c.telefone from Cliente AS c LEFT JOIN Veiculo AS v ON c.cpf = v.cpf";
//condicao para pesquisar cpf
if (filtro.getCpfCliente().trim().length() > 0) {
sql += " and c.cpf like ?";
}
//preparando a instrução
PreparedStatement preparedStatement = super.conectar().prepareStatement(sql);
//condicao para pesquisar cpf
if (filtro.getCpfCliente().trim().length() > 0) {
preparedStatement.setString(pos, filtro.getCpfCliente());
pos++;
}
//executando a instrução sql
ResultSet rs = preparedStatement.executeQuery();
//lendo os resultados
while (rs.next()) {
Cliente a = new Cliente();
a.setCpfCliente(rs.getString("cpf"));
a.setNome(rs.getString("nome"));
a.setTelefoneCliente(rs.getString("telefone"));
filtro.getVeiculos().add(v);
a.getVeiculos().get(i).setPlaca(rs.getString("placa"));
retorno.add(a);
}
//fechando a conexão com o banco de dados
super.desconectar();
return retorno;
}
Gostaria de saber se estou fazendo a alimentação de forma correta.
Minha exibição:
// Varável global
ArrayList<Cliente> cli;
private void jButtonPesAttCliActionPerformed(java.awt.event.ActionEvent evt) {
try {
Cliente c = new Cliente();
NegocioCliente dados = new NegocioCliente();
c.setCpfCliente(jTextFieldCPFCliAtt.getText());
this.cli = dados.listarCliente(c);
DefaultTableModel modelo = new DefaultTableModel();
String[] colunasDaTabela = {"CPF", "Nome", "Telefone", "Veículo"};
modelo.setColumnIdentifiers(colunasDaTabela);
for (Cliente cl : cli) {
String[] linhas = {cl.getCpfCliente().trim(), cl.getNome().trim(), cl.getTelefoneCliente().trim(), cl.getVeiculo().get(/*qual index ?*/).getPlaca()};
modelo.addRow(linhas);
}
jTable1.setModel(modelo);
} catch (SQLException sq) {
JOptionPane.showMessageDialog(rootPane, sq.getMessage());
} catch (Exception ex) {
JOptionPane.showMessageDialog(rootPane, ex.getMessage());
}
}