Pq vc fica adicionando o mesmo vetor de 3 posições NULAS como linha na sua tabela e depois insere manualmente os dados em cada coluna?
Pq n cria direto o vetor com os dados que quer inserir? vai poupar mto trabalho e quem sabe até resolver seu problema.
DefaultTableModel já é HORRÍVEL, mas ao menos tente n deixar o código como tal. Considere criar seu próprio tableModel.
sobre o seu vetor, n tem exemplo, vc tm q fazer:
1- O vetor vc precisa criar dentro do laço.
2 - Ao invés de passar null pras posições vc passa os valores destas colunas.
É mais facil q a gambiarra q tem ai.
Sobre criar seu tablemodel o google lhe responderá mto bem.
tmVendas = (DefaultTableModel) tbVendas.getModel();
int linha = tbVendas.getModel().getRowCount();
for (int i = linha - 1; i >= 0; i--) {
tmVendas.setNumRows(0);
}
Oi Maks_Silva com o intuito de te ajudar fiz um video comentando o possivel erro no seu codigo e algumas outras coisas que notei.
Video: https://youtu.be/gKbmSee_nUA
realmente estava faltando o null,
concordo com vc sobre os DAOS, pois tenho outra tela de cadastro de produtos, e nao ocorre problemas pois la so tem um DAO
esse código é identico a da tela de cadastro de produtos, e nao da problema, como vc disse vários DAOS deve estar dando esse problema.
mudei o código
private void pesquisar_venda() {
if (jtData_inicial.getText().equals(" / / “)) {
JOptionPane.showMessageDialog(this, “Preencha o campo data inicial.”);
jtData_inicial.requestFocus();
} else if (jtData_final.getText().equals(” / / ")) {
JOptionPane.showMessageDialog(this, “Preencha o campo data final.”);
jtData_final.requestFocus();
} else {
SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
Date datainicial = null;
Date datafinal = null;
try {
datainicial = format.parse(jtData_inicial.getText());
datafinal = format.parse(jtData_final.getText());
} catch (ParseException ex) {
Logger.getLogger(RelatorioFinanceiro.class.getName()).log(Level.SEVERE, null, ex);
}
if ((!jtData_inicial.getText().equals("")) && (!jtData_final.getText().equals(""))) {
String sql = "SELECT venda.data_inc as Data, \n"
+ " clientes.nome AS Nome,\n"
+ " usuario.usuario AS Usuário,\n"
+ " venda.total as Total\n"
+ "FROM venda\n"
+ " INNER JOIN clientes ON \n"
+ " venda.id_cliente = clientes.id \n"
+ " INNER JOIN usuario ON \n"
+ " venda.id_usuario = usuario.id \n"
+ " \n"
+ " where venda.data_inc between ? and ?"; // perceba as interrogações representando os parametros
try {
pst = conexao.prepareStatement(sql);
pst.setDate(1, new java.sql.Date(datainicial.getTime())); // 1 para a primeira interrogação
pst.setDate(2, new java.sql.Date(datafinal.getTime())); // 2 para a segunda interrgação
rs = pst.executeQuery();
tbVendas.setModel(DbUtils.resultSetToTableModel(rs));
} catch (SQLException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
} catch (NullPointerException ex) {
JOptionPane.showMessageDialog(null, " Relatorio não localizado nesta data!");
}
}
}
}
ele funciona, mas nao gera o relatorio do dia, acho q ta faltando encaixar esse codigo aqui em baixo.
String dataInicial = new SimpleDateFormat(“yyyy-MM-dd 00:00:00”).format(datainicial);
String dataFinal = new SimpleDateFormat(“yyyy-MM-dd 23:59:59”).format(datafinal);
para ele começar do 00:00:00 e finalizar 23:59:59.