Bom dia DEVs. Estou com o código abaixo que preenche uma jTabel a partir de uma consulta ao banco de dados de acordo com a solicitação do cliente.
private void btFiltrarActionPerformed(java.awt.event.ActionEvent evt) {
String sql = "";
String mes = tfMesAnoPesquisa.getText().substring(0, 2);
String ano = tfMesAnoPesquisa.getText().substring(3, 7);
if(rbMesAnoPesquisa.isSelected() && cbSubalmoxarifadoPesquisa.getSelectedItem().equals("TODOS")){
// Pesquisa Validades por Mês e Ano em TODOS os Subalmoxarifados
sql = "select v.id as vid, v.status as status, v.codproduto as codproduto, p.id as pid, p.tipo as tipo, p.apresentacao as apresentacao, "
+ "p.descricao as descricao, v.origem as origem, v.detalhe_origem as detalhe_origem, v.subalmoxarifado as subalmoxarifado, "
+ "s.id as sid, s.nome as nome, v.local as local, v.lote as lote, v.validade as validade, v.quantidade as qtde, v.cmm as cmm "
+ "from validades v, produtos p, subalmoxarifados s where month(validade) = " + mes + " and year(validade) = " + ano + " "
+ "and v.codproduto = p.id and v.subalmoxarifado = s.id order by validade" ;
}else if(rbAnoPesquisa.isSelected() && cbSubalmoxarifadoPesquisa.getSelectedItem().equals("TODOS")){
// Pesquisa Validades por Ano em TODOS os Subalmoxarifados
sql = "select v.id as vid, v.status as status, v.codproduto as codproduto, p.id as pid, p.tipo as tipo, p.apresentacao as apresentacao, "
+ "p.descricao as descricao, v.origem as origem, v.detalhe_origem as detalhe_origem, v.subalmoxarifado as subalmoxarifado, "
+ "s.id as sid, s.nome as nome, v.local as local, v.lote as lote, v.validade as validade, v.quantidade as qtde, v.cmm as cmm "
+ "from validades v, produtos p, subalmoxarifados s where year(validade) = " + tfAnoPesquisa.getText() + " "
+ "and v.codproduto = p.id and v.subalmoxarifado = s.id order by validade";
}else if(rbMesAnoPesquisa.isSelected() && !cbSubalmoxarifadoPesquisa.getSelectedItem().equals("TODOS")){
// Pesquisa Validades por Mês e Ano para o Subalmoxarifado Selecionado no ComboBox
sql = "select v.id as vid, v.status as status, v.codproduto as codproduto, p.id as pid, p.tipo as tipo, p.apresentacao as apresentacao, "
+ "p.descricao as descricao, v.origem as origem, v.detalhe_origem as detalhe_origem, v.subalmoxarifado as subalmoxarifado, "
+ "s.id as sid, s.nome as nome, v.local as local, v.lote as lote, v.validade as validade, v.quantidade as qtde, v.cmm as cmm "
+ "from validades v, produtos p, subalmoxarifados s "
+ "where month(validade) = " + mes + " and year(validade) = " + ano + " and subalmoxarifado = "+ codsubalmoxarifadosearch + " "
+ "and v.codproduto = p.id and v.subalmoxarifado = s.id order by validade";
}else if(rbAnoPesquisa.isSelected() && !cbSubalmoxarifadoPesquisa.getSelectedItem().equals("TODOS")){
// Pesquisa Validades por Ano para o Subalmoxarifado Selecionado no ComboBox
sql = "select v.id as vid, v.status as status, v.codproduto as codproduto, p.id as pid, p.tipo as tipo, p.apresentacao as apresentacao, "
+ "p.descricao as descricao, v.origem as origem, v.detalhe_origem as detalhe_origem, v.subalmoxarifado as subalmoxarifado, "
+ "s.id as sid, s.nome as nome, v.local as local, v.lote as lote, v.validade as validade, v.quantidade as qtde, v.cmm as cmm "
+ "from validades v, produtos p, subalmoxarifados s "
+ "where year(validade) = " + tfAnoPesquisa.getText() + " and subalmoxarifado = "+ codsubalmoxarifadosearch + " "
+ "and v.codproduto = p.id and v.subalmoxarifado = s.id order by validade";
}
con.conecta();
tbDados.getColumnModel().getColumn(0).setPreferredWidth(10);
tbDados.getColumnModel().getColumn(1).setPreferredWidth(100);
while(tmValidades.getRowCount() > 0){
tmValidades.removeRow(0);
}
JOptionPane.showMessageDialog(null, sql);
con.executeSQL(sql);
validades = new ArrayList<>();
produtos = new ArrayList<>();
subalmoxarifados = new ArrayList<>();
try{
while(con.rs.next()){
vb = new ValidadesBean();
pb = new ProdutosBean();
sb = new SubalmoxarifadoBean();
vb.setId(con.rs.getInt("vid"));
vb.setStatus(con.rs.getString("status"));
vb.setCodproduto(con.rs.getInt("codproduto")); // Buscar na Tabela Produtos o TIPO a APRESENTAÇÃO e a DESCRIÇÃO do PRODUTO
vb.setLote(con.rs.getString("lote"));
vb.setValidade(con.rs.getDate("validade"));
vb.setQuantidade(con.rs.getInt("qtde"));
vb.setCmm(con.rs.getInt("cmm"));
vb.setSubalmoxarifado(con.rs.getShort("subalmoxarifado")); // Buscar na Tabela Subalmoxarifados o NOME do SUBALMOXARIFADO
vb.setLocal(con.rs.getString("local"));
vb.setOrigem(con.rs.getString("origem"));
vb.setDetalhe_origem(con.rs.getString("detalhe_origem"));
validades.add(vb);
pb.setId(con.rs.getInt("pid"));
pb.setTipo(con.rs.getString("tipo"));
pb.setApresentacao(con.rs.getString("apresentacao"));
pb.setDescricao(con.rs.getString("descricao"));
produtos.add(pb);
sb.setId(con.rs.getInt("sid"));
sb.setNome(con.rs.getString("nome"));
subalmoxarifados.add(sb);
}
if(validades.size() == 0){
}else{
for(int i = 0; i < validades.size(); i++){
for(int j = 0; j < produtos.size(); j++){
tmValidades.addRow(new String[] {
sdf.format(validades.get(i).getValidade()),
produtos.get(i).getDescricao()
});
}
}
}
}catch(Exception e){
e.printStackTrace();
}finally{
con.desconecta();
}
}
O interessante é que quando eu faço a busca por mês e ano os registros na tabela são mostrados corretamente, um de cada, e quando eu faço a busca por ano a tabela mostra os registros duplicados.
Alguém aí identifica qual o meu problema?
Agradecido!