Não cadastrando no banco de dados

9 respostas
A

Estou fazendo um sistema como sou iniciante, estou começando por partes estou na tela de cadastro de PRODUTOS

Banco de dados: Access
Usando o NetBeans Ultima versão

As variavel do bando estão assim:

CODIGO:numero
GRUPO:texto
PRODUTO:texto
ESTOQUE: numero
CUSTO: numero
VENDA: numero
DATACOMPRA: texto
VALIDADE: texto

Na hora de cadastrar aparece este erro:

Conectado!
General error
Problemas na operação, verifique se você digitou os campos corretamente!
Conexão Fechada

estou usando classe DAO

o codigo onde estão os set e get:

package model;

public class Produto {
   private int codigo;
   private String grupo;
   private String produto;
   private String datacompra;
   private int estoque;
   private float custo;
   private float venda;
   private String validade;
   public void setCodigo(int codigo) {
      this.codigo = codigo;
   }
   public void setGrupo(String grupo) {
      this.grupo = grupo;
   }
   public void setProduto(String produto) {
      this.produto = produto;
   }
   public void setDataCompra(String datacompra) {
      this.datacompra = datacompra;
   }
   public void setEstoque(int estoque) {
      this.estoque = estoque;
   }
   public void setCusto(float custo) {
      this.custo = custo;
   }
   public void setVenda(float venda) {
      this.venda = venda;
   }
   public void setValidade(String validade) {
      this.validade = validade;
   }

   public int getCodigo() {
      return this.codigo;
   }
   public String getGrupo() {
      return this.grupo;
   }
   public String getProduto() {
      return this.produto;
   }
   public int getEstoque() {
      return this.estoque;
   }
   public double getCusto() {
      return this.custo;
   }
   public double getVenda() {
      return this.venda;
   }
   public String getDataCompra() {
      return this.datacompra;
   }
   public String getValidade() {
      return this.validade;
   }
}

o codigo para inserir é este:

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();
    }
 }

Na interface o codigo do botão gravar é este:

private void btGravarActionPerformed(java.awt.event.ActionEvent evt) {                                         

        if(evt.getSource()==btGravar){
         produto.setCodigo(tfCodigo.getX());
         produto.setGrupo(tfGrupo.getText());
         produto.setProduto(tfProduto.getText());
         produto.setEstoque(tfEstoque.getX());
         produto.setCusto(tfCusto.getAlignmentX());
         produto.setVenda(tfVenda.getAlignmentX());
         produto.setDataCompra(tfCompra.getText());
         produto.setValidade(tfValidade.getText());
         daoProduto.insere(produto);
         LimparCampos();
         setBotoes(true,false,false,false,true,false,true);
         setCampos(true,false,false,false,false,false,false,false);
       }
    }

Sendo que eu digito os campos assim:

Codigo: 001 ; Grupo: Alimento ; Produto: Arroz ; Estoque: 50 ; Data da Compra: 13/08/2011 ; Data da validade: 13/02/2012 ; Preço de custo: 12 ; Preço de venda: 18

Gostaria de saber onde esta o erro

fico no aguardo obrigado pessoal

9 Respostas

fernandopaiva

Primeira coisa é não usar Access(ecaa). Mesmo q seja como esta dizendo, esta aprendendo !!!

Se quer usar um banco de dados embedded, use HSQLDB, Derby, H2 etc…Ou opte por MySQL, PostgresSQL etc…Access num compensa.

Para valores R$ use BigDecimal e nao Double ou Float.

o DAO funciona assim.

//classe de conexao, fabrica de conexao
public class ConexaoMySQL{
    public static Connection getConnection() throws SQLException{
        try {            
            Class.forName("com.mysql.jdbc.Driver");             
            return DriverManager.getConnection("jdbc:mysql://localhost/bancoDados?user=user&password=senha");                         
        } catch (ClassNotFoundException e) {
            JOptionPane.showMessageDialog(null, e.getMessage());            
            throw new SQLException();            
        }        
    } 
    
}



//Classe de Persistencia DAO
public class ProdutosDAO{
        private Connection con;
 
        public ProdutosDAO(){
               this.con = ConexaoMySQL.getConnection(); //aqui pego a conexao da factory, veja q nao preciso conectar e desconectar
        }

      public void insere(Produto p){
            PreparedStatement stm = this.con.prepareStatement("INSERT INTO produtos (descricao, valorUnitario) VALUES (?,?)");
            stm.setString(1, p.getDescricao());
            stm.setBigDecimal(2, p.getValorUnitario());
            stm.executeUpdate();
            stm.close();
      }
}

Estude a apostila FJ21 da Caelum, vc consegue baixar no Google.

t+ e boa sorte.

A

Mas pelo menos eu gostaria de saber onde esta este erro please!

Você falou do tipo de banco, como e classe DAO, mas não o erro

fernandopaiva

alucardmaas:
Mas pelo menos eu gostaria de saber onde esta este erro please!

Você falou do tipo de banco, como e classe DAO, mas não o erro

Sao varios os erros,

1 - Warning: Nao concatene Strings SQL, use PreparedStatement como mostrei.
2 - Question: Pq usa evt.getSource() == btnGravar ?? …vc usa um botao so pra fazer insert/update/delete ???
3 - Question: setBotoes ??? pra q serve ?
4 - Question: setCampos ??? pra q serve ?
5 - Error: Onde esta o Statement do executeUpdate ???
6 - Warning: Vc usa conectar logo no inicio da assinatura do metodo insere(), para cada metodo vc fara isso ? Se for isso nao se faz.
7 - Information: Aparentemente, a olho nu como estou aqui, somente seu POJO(Bean) esta correto, apesar de estar faltando o Construtor vazio.

entre no site: www.iguanasistemas.com.br, baixe o programa e veja como eu fiz.

t+ e boa sorte.

A

Eu usei como exemplo para criar a classe DAO deste link:

http://javafree.uol.com.br/artigo/874102/Aplicativo-Java-com-acesso-a-banco-de-dados-1º-parte-Dao.html

OBS: gostaria de saber se posso usar este exemplo ou se vc recomenda um para mim.

Agora no codigo:

os metodos setbotoes e o outro metodo sao para limpar os campos.

mas me da um exemplo sobre DAO ou um site no qual posso me basear

fernandopaiva

alucardmaas:
Eu usei como exemplo para criar a classe DAO deste link:

http://javafree.uol.com.br/artigo/874102/Aplicativo-Java-com-acesso-a-banco-de-dados-1º-parte-Dao.html

OBS: gostaria de saber se posso usar este exemplo ou se vc recomenda um para mim.

Agora no codigo:

os metodos setbotoes e o outro metodo sao para limpar os campos.

mas me da um exemplo sobre DAO ou um site no qual posso me basear

Pelo visto vc ta bem perdido com DAO, de uma estudada na apostila FJ21 da Caelum como falei no primeiro post. DAO é bem básico, não tem segredo.
O exemplo do primeiro post q mandei é mais q suficiente pra entender como funciona, faltando apenas o POJO q vc criou, adapte-o conforme sua necessidade.

Para controlar seus componentes, evite ficar criando esses metodos de limpar/desabilitar/habilitar dentro do seu Form. Crie uma Classe de configuracao pra isso, com os metodos q precisa pra desabilitar/habilitar seus controles. Isso vai deixar seu código mais limpo e melhor reutilizavel para todas as suas classes.

aqui como costumo fazer para controlar meus campos/botoes etc.

public class BlockUnblockClearFields {
    private Component[] c;
    
    public BlockUnblockClearFields(JPanel panel){
        c = panel.getComponents();
    }

    public void blockButtons(){
        /**
         * Bloqueia todos os Botoes
         */
        for(Component cp : c){
            if(cp instanceof JButton){
                cp.setEnabled(false);                
            }           
        }         
    }
    
    public void block(){
        /**
         * Bloqueia todos os Campos de Edição
         */
        for(Component cp : c){
            if(cp instanceof JTextField || cp instanceof JComboBox || cp instanceof JDateChooser || cp instanceof JCheckBox || cp instanceof JTextArea || cp instanceof JEditorPane){
                cp.setEnabled(false);                
            }           
        }
    }
    
    public void unBlock(){
        /**
         * Desbloqueia todos os Campos de Edição
         */
        for(Component cp : c){
            if(cp instanceof JTextField || cp instanceof JComboBox || cp instanceof JDateChooser || cp instanceof JCheckBox || cp instanceof JTextArea || cp instanceof JEditorPane){
                cp.setEnabled(true);
            }
        }
    }
    
    public void clearAll(){
        /**
         * Limpa todos os valores dos Campos de Edição
         */
        for(Component cp : c){
            //|| cp instanceof JDateChooser || cp instanceof JCheckBox || cp instanceof JTextArea || cp instanceof JEditorPane
            if(cp instanceof JTextField){
                JTextField txtField = (JTextField)cp;
                txtField.setText("");              
            }else if(cp instanceof JDateChooser){
                JDateChooser dateChooser = (JDateChooser)cp;
                JTextField txtFieldDate = (JTextField)dateChooser.getDateEditor().getUiComponent();
                txtFieldDate.setText("");
            }else if(cp instanceof JCheckBox){
                JCheckBox checkBox = (JCheckBox)cp;
                checkBox.setSelected(false);
            }else if(cp instanceof JTextArea){
                JTextArea txtArea = (JTextArea)cp;
                txtArea.setText("");
            }else if(cp instanceof JEditorPane){                 
                JEditorPane txtEditorPane = (JEditorPane)cp;
                txtEditorPane.setText("");
            }
        }
    }
}

Assim eu tendo essa classe, apenas passo os JPanel onde estao meus componentes para fazer o que preciso.

t+ e boa sorte.

fernandopaiva

A respeito do link q vc me mandou, eu nao comento por ética. Mas eu nao usaria a técnica.

t+ e boa sorte.

A

Gostaria de Saber o link para download pois só acho megaupload, o mesmo encontra-se fora do ar

fernandopaiva

Google é seu amigo.

veja: http://www.caelum.com.br/download/caelum-java-web-fj21.pdf

aqui tbm: http://www.caelum.com.br/apostilas/

a FJ11 tbm é muito boa pra vc ler, é o começo de tudo.

t+ e boa sorte.

A

obrigado e ate +

Criado 24 de janeiro de 2012
Ultima resposta 24 de jan. de 2012
Respostas 9
Participantes 2