Boa Tarde!! Pessoal,
tenho um formulário de histórico de vendas por período, com os campos DataInicio e DataFinal. A busca das vendas por período está funcionando perfeitamente, porem, eu tentei incrementar algo a mais, por exemplo, além de buscar apenas por período específico, eu gostaia de buscar por período e tambem por codigo do cliente, ou por periodo e pelo nome do cliente, ou por periodo + o código do cliente + vendas a prazo.
Tentei fazer isso no método buscar vendas por período mas nao está dando certo. Consegui apenas usando o periodo e o código do cliente. Quando tento fazer apenas com o periodo e o nome do cleinte dá erro.
aqui estao o método e sua implementação:
public List<Vendas> listarVendasPorClintenoPeriodo(int CodCliente, LocalDate DataInicio, LocalDate DataFim){
try {
// 1º passo - criar a Lista
List<Vendas> lista = new ArrayList<>();
// 2º passo - instrução SQL, organiza-la e executar
String sql = "select v.id, date_format(v.data_venda,'%d/%m/%Y') as data_formatada, c.nome, v.total_venda, v.observacoes from tb_vendas as v "
+"inner join tb_clientes as c on(v.cliente_id = c.id) where v.cliente_id = ? and v.data_venda BETWEEN ? and ?";
PreparedStatement stmt = con.prepareStatement(sql);
//colocando os parametros
stmt.setInt(1, CodCliente);
stmt.setString(2, DataInicio.toString());
stmt.setString(3, DataFim.toString());
ResultSet rs = stmt.executeQuery();
while(rs.next()){
Vendas obj = new Vendas();
Clientes c = new Clientes();
obj.setId(rs.getInt("v.id"));
obj.setData_venda(rs.getString("data_formatada"));
c.setNome(rs.getString("c.nome"));
obj.setTotal_venda(rs.getDouble("v.total_venda"));
obj.setObservacao(rs.getString("v.observacoes"));
obj.setCliente(c);
lista.add(obj);
}
return lista;
} catch (SQLException erro) {
JOptionPane.showMessageDialog(null, "Ops!!! !!" + erro);
return null;
}
}
public List<Vendas> listarVendasPorClintePorNome(String nomeCliente, LocalDate DataInicio, LocalDate DataFim){
try {
// 1º passo - criar a Lista
List<Vendas> lista = new ArrayList<>();
// 2º passo - instrução SQL, organiza-la e executar
String sql = "select v.id, date_format(v.data_venda,'%d/%m/%Y') as data_formatada, c.nome, v.total_venda, v.observacoes from tb_vendas as v "
+"inner join tb_clientes as c on(v.cliente_id = c.id) where c.nome like ? and v.data_venda BETWEEN ? and ?";
PreparedStatement stmt = con.prepareStatement(sql);
//colocando os parametros
stmt.setString(1, nomeCliente);
stmt.setString(2, DataInicio.toString());
stmt.setString(3, DataFim.toString());
ResultSet rs = stmt.executeQuery();
while(rs.next()){
Vendas obj = new Vendas();
Clientes c = new Clientes();
obj.setId(rs.getInt("v.id"));
obj.setData_venda(rs.getString("data_formatada"));
c.setNome(rs.getString("c.nome"));
obj.setTotal_venda(rs.getDouble("v.total_venda"));
obj.setObservacao(rs.getString("v.observacoes"));
obj.setCliente(c);
lista.add(obj);
}
return lista;
} catch (SQLException erro) {
JOptionPane.showMessageDialog(null, "Ops!!! !!" + erro);
return null;
}
}
e aqui está a implementação:
private void btnPesquisarActionPerformed(java.awt.event.ActionEvent evt) {
// Metodo Buscar vendas por período
// É necessário fazer a conversão de datas
// Primeiro passo: Receber a data
DateTimeFormatter formato = DateTimeFormatter.ofPattern("dd/MM/yyyy");
String nome = "%"+TxtNome.getText()+"%";
int CodCliente = Integer.parseInt(TxtCodCliente.getText());
LocalDate DataInicio = LocalDate.parse(TxtDataInicial.getText(), formato);
LocalDate DataFim = LocalDate.parse(TxtDataFinal.getText(), formato);
VendasDAO dao = new VendasDAO();
if(TxtCodCliente.getText() != ""){
List<Vendas>lista = dao.listarVendasPorClintenoPeriodo(CodCliente, DataInicio, DataFim);
DefaultTableModel dados = (DefaultTableModel)TabelaHistorico.getModel();
dados.setNumRows(0);
for (Vendas v:lista){
dados.addRow(new Object[]{
v.getId(),
v.getData_venda(),
v.getCliente().getNome(),
v.getTotal_venda(),
v.getObservacao()
});
}
} else{
List<Vendas>lista = dao.listarVendasPorClintePorNome(nome, DataInicio, DataFim);
DefaultTableModel dados = (DefaultTableModel)TabelaHistorico.getModel();
dados.setNumRows(0);
for (Vendas v:lista){
dados.addRow(new Object[]{
v.getId(),
v.getData_venda(),
v.getCliente().getNome(),
v.getTotal_venda(),
v.getObservacao()
});
}
}
Essa é a mesangem que recebo:
Exception in thread “AWT-EventQueue-0” java.lang.NumberFormatException: For input string: “”
at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:67)
at java.base/java.lang.Integer.parseInt(Integer.java:675)
at java.base/java.lang.Integer.parseInt(Integer.java:781)
at br.com.projeto.view.frmVendasPorCliente.btnPesquisarActionPerformed(frmVendasPorCliente.java:254)
at br.com.projeto.view.frmVendasPorCliente.access$300(frmVendasPorCliente.java:35)
at br.com.projeto.view.frmVendasPorCliente$4.actionPerformed(frmVendasPorCliente.java:145)
Alguem consegue identificar o que está acontecendo ?