Problemas com consultas

Galera to tentando fazer uma consulta de vendas no meu sistema , mais não estou conseguindo tenho a classe
VendasBean :

//declarando objetos que irão representar os campos da tabela vendas
public class VendasBean {
    
    /** Creates a new instance of VendasBean */
    public VendasBean() {
    }
    
    private Integer codigo;
    private Integer codigoProduto;
    private Integer codigoCliente;
    private Date dataVenda;
    private Integer quantidade;
    private String  nomeCliente;
    private String nomeProduto;

    
    public Integer getCodigo() {
        return codigo;
    }

    public void setCodigo(Integer codigo) {
        this.codigo = codigo;
    }

    public Integer getCodigoProduto() {
        return codigoProduto;
    }

    public void setCodigoProduto(Integer codigoProduto) {
        this.codigoProduto = codigoProduto;
    }

    public Integer getCodigoCliente() {
        return codigoCliente;
    }

    public void setCodigoCliente(Integer codigoCliente) {
        this.codigoCliente = codigoCliente;
    }

    public Date getDataVenda() {
        return dataVenda;
    }

    public void setDataVenda(Date dataVenda) {
        this.dataVenda = dataVenda;
    }

    public Integer getQuantidade() {
        return quantidade;
    }

    public void setQuantidade(Integer quantidade) {
        this.quantidade = quantidade;
    }

    public String getNomeCliente() {
        return nomeCliente;
    }

    public void setNomeCliente(String nomeCliente) {
        this.nomeCliente = nomeCliente;
    }

    public String getNomeProduto() {
        return nomeProduto;
    }

    public void setNomeProduto(String nomeProduto) {
        this.nomeProduto = nomeProduto;
    }
}

a classe VendasControl:

String cadastraVenda = "INSERT INTO VENDAS (CODIGO, PRODUTOS_CODIGO, CLIENTES_CODIGO, DATA_VENDA, QUANTIDADE)" +
            " VALUES(?,?,?,?,?)";

String consultaVendas = "SELECT Vendas.codigo As codigo, Clientes.Nome AS NOMECLIENTE, produtos.Nome as NOMEPRODUTO, vendas.Quantidade " +
           "AS QUANTIDADE, vendas.Data_Venda AS DATA_VENDA  "+
           "FROM (Vendas LEFT JOIN Clientes ON Vendas.clientes_codigo = Clientes.codigo)" +
           "LEFT JOIN  Produtos ON Vendas.produtos_codigo= Produtos.codigo" +
           "WHERE    vendas.Data_Venda BETWEEN ? AND ? ";

 AcessoMySql bd = new AcessoMySql();

public List<VendasBean> listarVendas(Date dataInicial, Date dataFinal){
        try {
            pstm = bd.conectar().prepareStatement(consultaVendas);
            pstm.setDate(1, dataInicial);
            pstm.setDate(2, dataFinal);
            rs = pstm.executeQuery();
            List<VendasBean> venda = new ArrayList<VendasBean>();
            while (rs.next()){
                VendasBean vb = new VendasBean();
                vb.setCodigo(rs.getInt("codigo"));
                vb.setNomeCliente(rs.getString(" NOMECLIENTE"));
                vb.setNomeProduto(rs.getString("NOMEPRODUTO"));
                vb.setQuantidade(rs.getInt("quantidade"));
                vb.setDataVenda(rs.getDate("data_venda"));
                venda.add(vb);
            }
            bd.desconectar();
            return venda;
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        return null;
    }

e o meu formulário ConsultarVendas:

 private void pesquisarVendas(){
        VendasControl vc = new VendasControl();
        if (ftfDataInicio.getValue() == null){
            JOptionPane.showMessageDialog(this, "Informe a data Inicial!");
            ftfDataInicio.requestFocus();
        } else if (ftfDataFim.getValue() == null){
            JOptionPane.showMessageDialog(this, "Informe a data Final!");
            ftfDataFim.requestFocus();
        } else {
            while (tmVendas.getRowCount() > 0){
                tmVendas.removeRow(0);
            }
            SimpleDateFormat formato = new SimpleDateFormat("yyyy-MM-dd");
            java.util.Date dataInicio = (java.util.Date) ftfDataInicio.getValue();
            System.out.println(formato.format(dataInicio));
            java.util.Date dataFim = (java.util.Date) ftfDataFim.getValue();
            vendas = vc.listarVendas(Date.valueOf(formato.format(dataInicio)), Date.valueOf(formato.format(dataFim)));
            String [] campos = new String[] {null, null, null, null, null};
            for (int i = 0; i < vendas.size(); i++){
                tmVendas.addRow(campos);
                tmVendas.setValueAt(vendas.get(i).getCodigo(), i, 0);
                tmVendas.setValueAt(vendas.get(i).getNomeCliente(), i, 1);
                tmVendas.setValueAt(vendas.get(i).getNomeProduto(), i, 2);
                tmVendas.setValueAt(vendas.get(i).getQuantidade(), i, 3);
                tmVendas.setValueAt(vendas.get(i).getDataVenda(), i, 4);
            }
            if (vendas.size() == 0){
                JOptionPane.showMessageDialog(this, "Nenhum registro encontrado!");
            }
        }
    }

o meu problema é o seguinte , eu queria listar na minha consulta o codigo da venda , cliente , produto , quantidade
e data , mais ele gera uma exceção, creio eu que o erro na String consultaVendas ,que está sendo usado um join ,pois, tenho a tabela vendas que esta relacionada com produtos e clientes, mais não to conseguindo fazer essa consulta me ajudem por favor;

Você poeria postar a exceção gerada ?

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘vendas.Data_Venda BETWEEN ‘2009-06-11’ AND ‘2009-06-11’’ at line 1
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
at com.mysql.jdbc.Util.getInstance(Util.java:381)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1031)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:957)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3376)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3308)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1837)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1961)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2543)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1737)
at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1888)

é uma consulta por datas , onde eu informo a data inicial e data final.

Já tentou executar esta sql direto no mysql ?
Ela funciona ou apresenta erro ?

Bom eu coloquei o sql de consulta no meu MySql, to usando MySql front como ferramenta, ele não da nenhum erro,
mais tbém não me retorna nenhum valor na consulta.

Galera por favor me ajudem to dependendo disso aki, é um projeto da faculdade, to precisando muito vamos me ajudem…

:shock:

bom não manjo muito de sql, mais o sql passado foi esse…

String consultaVendas = "SELECT Vendas.codigo As codigo, Clientes.Nome AS NOMECLIENTE, produtos.Nome as NOMEPRODUTO, vendas.Quantidade " +
           "AS QUANTIDADE, vendas.Data_Venda AS DATA_VENDA  "+
           "FROM (Vendas LEFT JOIN Clientes ON Vendas.clientes_codigo = Clientes.codigo)" +
           "LEFT JOIN  Produtos ON Vendas.produtos_codigo= Produtos.codigo" +
           "WHERE    vendas.Data_Venda BETWEEN ? AND ? ";

Tente assim, coloquei espaços depois das aspas, é possível que ao concatenar a sql fique com trechos “…Produtos.codigoWHERE…”, ai exceção de gerada reclama da sintaxe, com o espaço o trecho vai ficar “…Produtos.codigo WHERE…”


String consultaVendas = " SELECT Vendas.codigo As codigo, Clientes.Nome AS NOMECLIENTE, produtos.Nome as NOMEPRODUTO, vendas.Quantidade " +   
           " AS QUANTIDADE, vendas.Data_Venda AS DATA_VENDA  "+   
           " FROM (Vendas LEFT JOIN Clientes ON Vendas.clientes_codigo = Clientes.codigo) " +   
           " LEFT JOIN  Produtos ON Vendas.produtos_codigo= Produtos.codigo " +   
           " WHERE    vendas.Data_Venda BETWEEN ? AND ? ";  

Veja ai se funciona.

Cara obrigado pela ajuda, ta quase dando certo…ele me dá esse erro aqui…
java.sql.SQLException: Column ’ NOMECLIENTE’ not found.

mais não entendi por que ele achou essa coluna…

se eu dasabilitar essa linha ele consulta certo menos o cliente …

  1.   vb.setNomeCliente(rs.getString(" NOMECLIENTE"));
    

perdoe minha ingenuidade no assunto , sou inicante na area…wleu

[quote=Donizeti]Cara obrigado pela ajuda, ta quase dando certo…ele me dá esse erro aqui…
java.sql.SQLException: Column ’ NOMECLIENTE’ not found.

mais não entendi por que ele achou essa coluna…

se eu dasabilitar essa linha ele consulta certo menos o cliente …

  1.   vb.setNomeCliente(rs.getString(" NOMECLIENTE"));
    

perdoe minha ingenuidade no assunto , sou inicante na area…wleu[/quote]
Fala cara, blza?

Meu, tem um espacinho antes do nome da conluna

vb.setNomeCliente(rs.getString(" NOMECLIENTE"));

É só tirar o espeço entra a primeira " e o nome.

Abraço

wleu galera agora sim deu certo era só isso mesmo…
agradeço a ajuda…

Abraço a todos…

[quote=Donizeti]Galera por favor me ajudem to dependendo disso aki, é um projeto da faculdade, to precisando muito vamos me ajudem…

:shock:[/quote]

Seu problema esta bem detalhado na Exception gerada pelo JDBC:

[…] Syntax Error. […]

Dê uma conferida na forma como esta passando os valores de data para o PreparedStatement. O problema esta ali.

Até.

Uma dica fora do contexto:
Não é necessário fazer tantas conversões com o Date.

Até.