Erro ao atualizar os dados no banco de dados! Ajuda

6 respostas
A

Boa noite caros,

O programa esta gerando um erro na hora de atualizar os dados:

Codigo classe DaoProduto:

package dao;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Vector;

import javax.swing.JOptionPane;

import model.Produto;
import dao.banco.ConFactory;

public class DaoProduto {
   // Configura essas variáveis de acordo com o seu banco
   private final String URL = "jdbc:odbc:DRIVER={Microsoft Access Driver (*.mdb)};DBQ=c:/meubd/banco.mdb",
         NOME = "", SENHA = "";

   private Connection con;
   private Statement comando;

   public void apagar(String codigo) {
      conectar();
      try {
         comando.executeUpdate("DELETE FROM produto WHERE codigo = '" + codigo + "';");
               JOptionPane.showMessageDialog(null,"Exclusão realizada com sucesso");
      } catch (SQLException e) {
         imprimeErro("Erro ao apagar Produto", e.getMessage());
      } finally {
         fechar();
      }
   }

   public Vector<Produto> buscarTodos() {
      conectar();
      Vector<Produto> resultados = new Vector<Produto>();
      ResultSet rs;
      try {
         rs = comando.executeQuery("SELECT * FROM produto");
         while (rs.next()) {
            Produto temp = new Produto();
            // pega todos os atributos da pessoa
            temp.setCodigo(rs.getString("codigo"));
            temp.setGrupo(rs.getString("grupo"));
            temp.setProduto(rs.getString("nome do produto"));
            temp.setDataCompra(rs.getString("data da compra"));
            temp.setEstoque(rs.getString("estoque"));
            temp.setCusto(rs.getString("custo"));
            temp.setVenda(rs.getString("venda"));
            temp.setValidade(rs.getString("data de validade"));
            resultados.add(temp);
         }
         return resultados;
      } catch (SQLException e) {
         imprimeErro("Erro ao buscar Produto", e.getMessage());
         return null;
      }
   }

     // String com = "UPDATE pessoa SET nome = '" + pessoa.getNome()
           // + "', idade =" + pessoa.getIdade() + ", cidade = '"
           // + pessoa.getCidade() + "', estado ='" + pessoa.getEstado()
           // + "' WHERE  rg = '" + pessoa.getRg() + "';";

   public void atualizar(Produto produto) {
      conectar();
      String com = "UPDATE Produto SET codigo= '" + produto.getCodigo() + 
   	   	   "',grupo= " + produto.getGrupo() +
   	   	   "',nome do produto='" + produto.getProduto() +
   	   	   "',estoque='" + produto.getEstoque() +
   	   	   "',custo='" + produto.getCusto() +
                                   "',venda='" + produto.getVenda() +
                                   "',data da compra='" + produto.getDataCompra() +
                                   "',data de validade='" + produto.getValidade() +
   	   	   "WHERE codigo = '" + produto.getCodigo() + "';";
      try {
         comando.executeUpdate(com); // erro que esta sendo apontando aqui nesta linha 
         JOptionPane.showMessageDialog(null,"Operação realizada com sucesso!");
      } catch (SQLException e) {
         e.printStackTrace();
      } finally {
         fechar();
      }
   }

   public Vector<Produto> buscar(String codigo) {
      conectar();
      Vector<Produto> resultados = new Vector<Produto>();
      ResultSet rs;
      try {
         rs = comando.executeQuery("SELECT * FROM produto WHERE codigo LIKE '"
               + codigo + "%';");
         while (rs.next()) {
            Produto temp = new Produto();
            // pega todos os atributos da pessoa
            temp.setCodigo(rs.getString("codigo"));
            temp.setGrupo(rs.getString("grupo"));
            temp.setProduto(rs.getString("nome do produto"));
            temp.setDataCompra(rs.getString("data da compra"));
            temp.setEstoque(rs.getString("estoque"));
            temp.setCusto(rs.getString("custo"));
            temp.setVenda(rs.getString("venda"));
            temp.setValidade(rs.getString("data de validade"));
            resultados.add(temp);
         }
         return resultados;
      } catch (SQLException e) {
         imprimeErro("Erro ao buscar Produto", e.getMessage());
         return null;
      }

   }

   public void insere(Produto produto){
      conectar();
      try {
         comando.executeUpdate("INSERT INTO Produto VALUES('"
               + produto.getCodigo() + "','"
               + produto.getGrupo() + "','"
               + produto.getProduto() + "','"
               + produto.getEstoque() + "','"
               + produto.getCusto() + "','"
               + produto.getVenda() + "','"
               + produto.getDataCompra() + "','"       
               + produto.getValidade() + "')");
        JOptionPane.showMessageDialog(null,"Operação realizada com sucesso!");
      } catch (SQLException e) {
         imprimeErro("Problemas na operação, verifique se você digitou os campos corretamente!", e.getMessage());
      } finally {
         fechar();
    }
 }

   private void conectar() {
      try {
         con = ConFactory.conexao(URL, NOME, SENHA, ConFactory.MYSQL);
         comando = con.createStatement();
         System.out.println("Conectado!");
      } catch (ClassNotFoundException e) {
         imprimeErro("Erro ao carregar o driver", e.getMessage());
      } catch (SQLException e) {
         imprimeErro("Erro ao conectar", e.getMessage());
      }
   }

   private void fechar() {
      try {
         comando.close();
         con.close();
         System.out.println("Conexão Fechada");
      } catch (SQLException e) {
         imprimeErro("Erro ao fechar conexão", e.getMessage());
      }
   }

   private void imprimeErro(String msg, String msgErro) {
      JOptionPane.showMessageDialog(null, msg, "Erro crítico", 0);
      System.err.println(msg);
      System.out.println(msgErro);
      
   }
}

Erro que está sendo apresentado:

Conectado!
Conectado!
java.sql.SQLException: [Microsoft][Driver ODBC para Microsoft Access] Erro de sintaxe (operador faltando) na express?o de consulta 'Alimento',nome do produto='Carne',estoque='13/07/2011',custo='8',venda='R$ 16'.
        at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6957)
        at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7114)
        at sun.jdbc.odbc.JdbcOdbc.SQLExecDirect(JdbcOdbc.java:3110)
        at sun.jdbc.odbc.JdbcOdbcStatement.execute(JdbcOdbcStatement.java:338)
        at sun.jdbc.odbc.JdbcOdbcStatement.executeUpdate(JdbcOdbcStatement.java:288)
        at dao.DaoProduto.atualizar(DaoProduto.java:77)
        at TelaProduto.btAlterarActionPerformed(TelaProduto.java:341)
        at TelaProduto.access$500(TelaProduto.java:7)
        at TelaProduto$6.actionPerformed(TelaProduto.java:104)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
        at java.awt.Component.processMouseEvent(Component.java:6267)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
        at java.awt.Component.processEvent(Component.java:6032)
        at java.awt.Container.processEvent(Container.java:2041)
        at java.awt.Component.dispatchEventImpl(Component.java:4630)
        at java.awt.Container.dispatchEventImpl(Container.java:2099)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
        at java.awt.Container.dispatchEventImpl(Container.java:2085)
        at java.awt.Window.dispatchEventImpl(Window.java:2478)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
Conexão Fechada
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

Me ajudem o erro esta aqui nesta classe, ja tentei varias formas mas nao consegui, no metodo UPDATE,
Creio que deve ser erro de sintaxe, mas me ajudem muito obrigado!!!.

6 Respostas

oliversistemas

Cara… na linha 75 parece que vc esqueceu de começar usando entre as aspas e WHERE um espaço.
está…

ficará…

Testa aí e posta aqui denovo.

A

esta assim agora, mas gora esta aparecendo outro erro:

Codigo classe DaoProduto

package dao;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Vector;

import javax.swing.JOptionPane;

import model.Produto;
import dao.banco.ConFactory;

public class DaoProduto {
   // Configura essas variáveis de acordo com o seu banco
   private final String URL = "jdbc:odbc:DRIVER={Microsoft Access Driver (*.mdb)};DBQ=c:/meubd/banco.mdb",
         NOME = "", SENHA = "";

   private Connection con;
   private Statement comando;

   public void apagar(String codigo) {
      conectar();
      try {
         comando.executeUpdate("DELETE FROM produto WHERE codigo = '" + codigo + "';");
               JOptionPane.showMessageDialog(null,"Exclusão realizada com sucesso");
      } catch (SQLException e) {
         imprimeErro("Erro ao apagar Produto", e.getMessage());
      } finally {
         fechar();
      }
   }

   public Vector<Produto> buscarTodos() {
      conectar();
      Vector<Produto> resultados = new Vector<Produto>();
      ResultSet rs;
      try {
         rs = comando.executeQuery("SELECT * FROM produto");
         while (rs.next()) {
            Produto temp = new Produto();
            // pega todos os atributos da pessoa
            temp.setCodigo(rs.getString("codigo"));
            temp.setGrupo(rs.getString("grupo"));
            temp.setProduto(rs.getString("nome do produto"));
            temp.setDataCompra(rs.getString("data da compra"));
            temp.setEstoque(rs.getString("estoque"));
            temp.setCusto(rs.getString("custo"));
            temp.setVenda(rs.getString("venda"));
            temp.setValidade(rs.getString("data de validade"));
            resultados.add(temp);
         }
         return resultados;
      } catch (SQLException e) {
         imprimeErro("Erro ao buscar Produto", e.getMessage());
         return null;
      }
   }

     // String com = "UPDATE pessoa SET nome = '" + pessoa.getNome()
           // + "', idade =" + pessoa.getIdade() + ", cidade = '"
           // + pessoa.getCidade() + "', estado ='" + pessoa.getEstado()
           // + "' WHERE  rg = '" + pessoa.getRg() + "';";

   public void atualizar(Produto produto) {
      conectar();
      String com = "UPDATE Produto SET codigo= '" + produto.getCodigo() + 
   	   	   "',grupo= '" + produto.getGrupo() +
   	   	   "',nome do produto='" + produto.getProduto() +
   	   	   "',estoque='" + produto.getEstoque() +
   	   	   "',custo='" + produto.getCusto() +
                   "',venda='" + produto.getVenda() +
                   "',data da compra='" + produto.getDataCompra() +
                   "',data de validade='" + produto.getValidade() +
   	   	   "'WHERE codigo = '" + produto.getCodigo() + "';";
      try {
         comando.executeUpdate(com); // erro que esta sendo apontando aqui nesta linha
         JOptionPane.showMessageDialog(null,"Operação realizada com sucesso!");
      } catch (SQLException e) {
         e.printStackTrace();
      } finally {
         fechar();
      }
   }

   public Vector<Produto> buscar(String codigo) {
      conectar();
      Vector<Produto> resultados = new Vector<Produto>();
      ResultSet rs;
      try {
         rs = comando.executeQuery("SELECT * FROM produto WHERE codigo LIKE '"
               + codigo + "%';");
         while (rs.next()) {
            Produto temp = new Produto();
            // pega todos os atributos da pessoa
            temp.setCodigo(rs.getString("codigo"));
            temp.setGrupo(rs.getString("grupo"));
            temp.setProduto(rs.getString("nome do produto"));
            temp.setDataCompra(rs.getString("data da compra"));
            temp.setEstoque(rs.getString("estoque"));
            temp.setCusto(rs.getString("custo"));
            temp.setVenda(rs.getString("venda"));
            temp.setValidade(rs.getString("data de validade"));
            resultados.add(temp);
         }
         return resultados;
      } catch (SQLException e) {
         imprimeErro("Erro ao buscar Produto", e.getMessage());
         return null;
      }

   }

   public void insere(Produto produto){
      conectar();
      try {
         comando.executeUpdate("INSERT INTO Produto VALUES('"
               + produto.getCodigo() + "','"
               + produto.getGrupo() + "','"
               + produto.getProduto() + "','"
               + produto.getEstoque() + "','"
               + produto.getCusto() + "','"
               + produto.getVenda() + "','"
               + produto.getDataCompra() + "','"       
               + produto.getValidade() + "')");
        JOptionPane.showMessageDialog(null,"Operação realizada com sucesso!");
      } catch (SQLException e) {
         imprimeErro("Problemas na operação, verifique se você digitou os campos corretamente!", e.getMessage());
      } finally {
         fechar();
    }
 }

   private void conectar() {
      try {
         con = ConFactory.conexao(URL, NOME, SENHA, ConFactory.MYSQL);
         comando = con.createStatement();
         System.out.println("Conectado!");
      } catch (ClassNotFoundException e) {
         imprimeErro("Erro ao carregar o driver", e.getMessage());
      } catch (SQLException e) {
         imprimeErro("Erro ao conectar", e.getMessage());
      }
   }

   private void fechar() {
      try {
         comando.close();
         con.close();
         System.out.println("Conexão Fechada");
      } catch (SQLException e) {
         imprimeErro("Erro ao fechar conexão", e.getMessage());
      }
   }

   private void imprimeErro(String msg, String msgErro) {
      JOptionPane.showMessageDialog(null, msg, "Erro crítico", 0);
      System.err.println(msg);
      System.out.println(msgErro);
      
   }
}

Erro diferente agora, está falando que é no UPDATE:

Conectado!
Conectado!
java.sql.SQLException: [Microsoft][Driver ODBC para Microsoft Access] Erro de sintaxe na instru??o UPDATE.
        at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6957)
        at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7114)
        at sun.jdbc.odbc.JdbcOdbc.SQLExecDirect(JdbcOdbc.java:3110)
        at sun.jdbc.odbc.JdbcOdbcStatement.execute(JdbcOdbcStatement.java:338)
        at sun.jdbc.odbc.JdbcOdbcStatement.executeUpdate(JdbcOdbcStatement.java:288)
        at dao.DaoProduto.atualizar(DaoProduto.java:77)
        at TelaProduto.btAlterarActionPerformed(TelaProduto.java:341)
        at TelaProduto.access$500(TelaProduto.java:7)
        at TelaProduto$6.actionPerformed(TelaProduto.java:104)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
        at java.awt.Component.processMouseEvent(Component.java:6267)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
        at java.awt.Component.processEvent(Component.java:6032)
        at java.awt.Container.processEvent(Container.java:2041)
        at java.awt.Component.dispatchEventImpl(Component.java:4630)
        at java.awt.Container.dispatchEventImpl(Container.java:2099)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
        at java.awt.Container.dispatchEventImpl(Container.java:2085)
        at java.awt.Window.dispatchEventImpl(Window.java:2478)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Conexão Fechada
oliversistemas

Eu uso ponto e vírgula somente se for realizar várias gravações em uma só transação.
Sugiro (na linha 75) retirar o ; e adicionar um espaço à esquerda de WHERE.
ERA

Vai ficar…

(Eu só não testo aqui pq não uso este SGBD)

Nicolas_Fernandes

Use PreparedStatements ao realizar suas consultas SQL ao invés de concatenação de strings. É muito mais seguro (SQL Injection) e evita esse tipo de dor de cabeça com aspas!

Ao invés de…

String com = "UPDATE Produto SET codigo= '" + produto.getCodigo() + "',grupo= '" + produto.getGrupo() + "',nome do produto='" + produto.getProduto() + "',estoque='" + produto.getEstoque() + "',custo='" + produto.getCusto() + "',venda='" + produto.getVenda() + "',data da compra='" + produto.getDataCompra() + "',data de validade='" + produto.getValidade() + "'WHERE codigo = '" + produto.getCodigo() + "';"; try { comando.executeUpdate(com); // erro que esta sendo apontando aqui nesta linha JOptionPane.showMessageDialog(null,"Operação realizada com sucesso!"); } catch (SQLException e) { e.printStackTrace(); } finally { fechar(); }

faça:

String sentencaUpdate = "UPDATE Produto SET grupo = ?, nomeproduto = ? WHERE codigo = ?";
PreparedStatement statementUpdate = connection.prepareStatement(sentencaUpdate);
statementUpdate.setInteger(1, produto.getGrupo());
statementUpdate.setString(2, produto.getNomeProduto());
statementUpdate.setInteger(3, produto.getCodigo());
statementUpdate.executeUpdate();
A

Deu erro, eu uso o banco de dados Access serve este parametro que você me passou:

Codigo como ficou:

Classe DaoProduto

public void atualizar(Produto produto) throws SQLException {
      conectar();
      String sentencaUpdate = "UPDATE Produto SET codigo = ?, grupo = ?, produto = ?,estoque = ?,custo = ?, venda = ?, data da compra = ?, data de validade = ?, WHERE codigo = ?";
        java.sql.PreparedStatement statementUpdate = con.prepareStatement(sentencaUpdate);
statementUpdate.setString(1, produto.getCodigo());
statementUpdate.setString(2, produto.getGrupo());
statementUpdate.setString(3, produto.getProduto());
statementUpdate.setString(4, produto.getEstoque());
statementUpdate.setString(5, produto.getCusto());
statementUpdate.setString(6, produto.getVenda());
statementUpdate.setString(7, produto.getDataCompra());
statementUpdate.setString(8, produto.getValidade());
statementUpdate.setString(9, produto.getCodigo());
statementUpdate.executeUpdate(sentencaUpdate);
      }

o erro:

run:
Conectado!
Conectado!
Exception in thread "AWT-EventQueue-0" java.sql.SQLException: Driver does not support this function
        at sun.jdbc.odbc.JdbcOdbcPreparedStatement.executeUpdate(JdbcOdbcPreparedStatement.java:164)
        at dao.DaoProduto.atualizar(DaoProduto.java:79)
        at TelaProduto.btAlterarActionPerformed(TelaProduto.java:341)
        at TelaProduto.access$500(TelaProduto.java:7)
        at TelaProduto$6.actionPerformed(TelaProduto.java:104)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
        at java.awt.Component.processMouseEvent(Component.java:6267)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
        at java.awt.Component.processEvent(Component.java:6032)
        at java.awt.Container.processEvent(Container.java:2041)
        at java.awt.Component.dispatchEventImpl(Component.java:4630)
        at java.awt.Container.dispatchEventImpl(Container.java:2099)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
        at java.awt.Container.dispatchEventImpl(Container.java:2085)
        at java.awt.Window.dispatchEventImpl(Window.java:2478)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
oliversistemas

Excelente sugestão do Nicolas.
Sugiro que você reveja a sua String: existem duas variáveis com espaços > datadacompra e datadevalidade
Ficando de:

Para:

Além disso, confira o tipo de todas as suas váriáveis pois ao invés de usar…

… como vc fez da linha 05 a 13 pode ser que em algumas vc precise de um…

Isso faz com que o tipo usado na sua classe Java seja construído adequadamente dentro da SQL sequenciaUpdate para corresponder com o seu banco de dados.

Criado 26 de julho de 2011
Ultima resposta 26 de jul. de 2011
Respostas 6
Participantes 3