[Resolvido] Problema ao inserir e atualizar

12 respostas
Agr0

Bom dia pessoal

Estou com um pequno problema na minha aplicação…

Tenho 2 tabelas: movimentacao e produtos.

Eu quando eu vou inserir em movimentacao ta tudo ok. Mas qnd eu vou inserir (movimentacao) + atualizar (produtos) ta dando um erro de sintaxe no banco.
Eu nao sei qual é o erro :cry:

vou colar o codigo aqui p facilitar.
PS: Eh uma aplicacao desktop

...

  String sql = null;

            /* Carregando o driver JDBC para um determinado SGBD */
            System.out.println("Inserindo dados....");

            //Insere um novo registro no BD
            PreparedStatement insere = con.prepareStatement("insert into movimentacao (codigo_funcionario,"
             + "codigo_produto,setor_destino,data_movimentacao,observacao) VALUES (?,?,?,?,?)  UPDATE produtos set  estado='"+jComboBox1+"' where codigo_produto='"+jTextField1+"' ");

            String codigoFuncionario = ("16");
            String codigoProduto = jTextField1.getText();
            String setorDestino = jTextField2.getText();
            String dataMovimentacao = jTextField5.getText();
            String observacao = jTextArea1.getText();
            String estado = jComboBox1.getSelectedItem().toString();

            insere.setString(1, codigoFuncionario);
            insere.setString(2, codigoProduto);
            insere.setString(3, setorDestino);
            insere.setString(4, dataMovimentacao);
            insere.setString(5, observacao);

            insere.executeUpdate();

...

12 Respostas

mauricionarcizo

qual o erro que está gerando?? coloque o erro para que possamos ajuda-lo…

pedruhenrik

qual o erro? posta a exception.

PreparedStatement insere = con.prepareStatement(“insert into movimentacao (codigo_funcionario,”
+ “codigo_produto,setor_destino,data_movimentacao,observacao)
VALUES (?,?,?,?,?) UPDATE produtos set estado=’”+jComboBox1+"’ where codigo_produto=’"+jTextField1+"’ ");

debugando qual o valor em jComboBox1 e jTextField1 ?

aconselho vc a ler um pouco sobre PreparedStatement, acho q a declaração esta errada.

att,

Agr0

pedruhenrik:
qual o erro? posta a exception.

PreparedStatement insere = con.prepareStatement(“insert into movimentacao (codigo_funcionario,”
+ “codigo_produto,setor_destino,data_movimentacao,observacao)
VALUES (?,?,?,?,?) UPDATE produtos set estado=’”+jComboBox1+"’ where codigo_produto=’"+jTextField1+"’ ");

debugando qual o valor em jComboBox1 e jTextField1 ?

aconselho vc a ler um pouco sobre PreparedStatement, acho q a declaração esta errada.

att,

Entao cara

O valor do jTextField1 ele pega da tabela (ele imprimi o resultado da busca na tabela )… Qnd eu clico na linha q eu quero, ele carrega tudo no formulario !
No formulario eu perciso mudar o estado, q eh justamente o tal UPDATE na tabela produtos. Se eu retirar o UPDATE o insert funciona perfeitamente… O problema eh qnd eu junto os 2 !

So nao sei onde eh q ta o erro : /

Agr0

Esse é o erro:

Conexão com o banco de dados estabelecida.
Inserindo dados…
Erro na conexão ao Bando de Dados : 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 'UPDATE produtos set estado=‘javax.swing.JComboBox[,208,242,96x25,layout=javax.s’ at line 1

pedruhenrik

então o erro é sintaxe sql, o q vc ta passando no combobox não é o valor e sim o próprio combobox.

leia um pouco mais sobre PreparedStatement.

experimenta assim:

PreparedStatement insere = con.prepareStatement("insert into movimentacao (codigo_funcionario,"
+ "codigo_produto,setor_destino,data_movimentacao,observacao) VALUES (?,?,?,?,?) UPDATE produtos set estado='"+jComboBox1.getValue()+"' where codigo_produto='"+jTextField1+"' ");

mas o correto, ate onde eu entendo seria dessa forma:

PreparedStatement insere = con.prepareStatement("insert into movimentacao (codigo_funcionario,"
+ "codigo_produto,setor_destino,data_movimentacao,observacao) VALUES (?,?,?,?,?) UPDATE produtos set estado= ? where codigo_produto=?");

insere.setString(6, jcomboBox1.getValue());  
insere.setString(7, jtextField1.getValue);
att,
Agr0
pedruhenrik:
então o erro é sintaxe sql, o q vc ta passando no combobox não é o valor e sim o próprio combobox.

leia um pouco mais sobre PreparedStatement.

experimenta assim:

PreparedStatement insere = con.prepareStatement("insert into movimentacao (codigo_funcionario,"
+ "codigo_produto,setor_destino,data_movimentacao,observacao) VALUES (?,?,?,?,?) UPDATE produtos set estado='"+jComboBox1.getValue()+"' where codigo_produto='"+jTextField1+"' ");

mas o correto, ate onde eu entendo seria dessa forma:

PreparedStatement insere = con.prepareStatement("insert into movimentacao (codigo_funcionario,"
+ "codigo_produto,setor_destino,data_movimentacao,observacao) VALUES (?,?,?,?,?) UPDATE produtos set estado= ? where codigo_produto=?");

insere.setString(6, jcomboBox1.getValue());  
insere.setString(7, jtextField1.getValue);
att,

Tentei das dus formas ! Da ERRO no GetValue !
:?

Eh verdade... A segunda forma seria "melhor"...

pedruhenrik

e qual o erro?

já debugou e viu como a query esta montado, tipo os valores e td mais?

att,

Agr0

pedruhenrik:
e qual o erro?

já debugou e viu como a query esta montado, tipo os valores e td mais?

att,

Acho q estamos no caminho certo… rs

Vou colar o codigo aqui, depois vou colar o erro !

String sql = null;

            /* Carregando o driver JDBC para um determinado SGBD */
            System.out.println("Inserindo dados....");

            //Insere um novo registro no BD
            PreparedStatement insere = con.prepareStatement("insert into movimentacao (codigo_funcionario,"
             + "codigo_produto,setor_destino,data_movimentacao,observacao) VALUES (?,?,?,?,?)  UPDATE produtos set estado='"+jComboBox1.getSelectedItem()+"' where codigo_produto='"+jTextField1.getText()+"' ");

            String codigoFuncionario = ("16");
            String codigoProduto = jTextField1.getText();
            String setorDestino = jTextField2.getText();
            String dataMovimentacao = jTextField5.getText();
            String observacao = jTextArea1.getText();
            String estado = jComboBox1.getSelectedItem().toString();

            insere.setString(1, codigoFuncionario);
            insere.setString(2, codigoProduto);
            insere.setString(3, setorDestino);
            insere.setString(4, dataMovimentacao);
            insere.setString(5, observacao);
          
           
            insere.executeUpdate();

O bom foi que no erro ele passou os valores q estao no JComboBox1 e no jTextField1 ! Ja é uma evolucao… Acho q ta faltando alguma aspa ou tem alguma aspa a + !
Eu acho q eh isso !

O ERRO:

Conexão com o banco de dados estabelecida.
Inserindo dados…
Erro na conexão ao Bando de Dados : 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 'UPDATE produtos set estado=‘Em estoque’ where codigo_produto=‘13’’ at line 1

pedruhenrik

PERAE!

só agora q eu vi…vc ta fazendo um insert e um update ao mesmo tempo!!!

copia sua query e executa direto no banco…ela funciona?

att,

Agr0

pedruhenrik:
PERAE!

só agora q eu vi…vc ta fazendo um insert e um update ao mesmo tempo!!!

copia sua query e executa direto no banco…ela funciona?

att,

Sim… Funciona !

pedruhenrik

olha eu desconheço essa prática, utilizar uma única query para insert e update.

pq não utilizar uma query para cada coisa? pq vc já não passa os valores do combobox e textfield para esses metodos.

de qualquer maneira o erro esta na sintaxe, da uma lida no manual do mysql, experimenta fazer a manipulação com o banco separando esses metodos.

boa sorte.

att,

Agr0

pedruhenrik:
olha eu desconheço essa prática, utilizar uma única query para insert e update.

pq não utilizar uma query para cada coisa? pq vc já não passa os valores do combobox e textfield para esses metodos.

de qualquer maneira o erro esta na sintaxe, da uma lida no manual do mysql, experimenta fazer a manipulação com o banco separando esses metodos.

boa sorte.

att,

RESOLVIDO

Entao cara… Fiz separado e deu certo… Mas pelo o que fiquei sabendo, tem como fazer tudo junto.
Mas ficar assim mesmo, rs. Vou colar o codigo correto aqui.

...


            /* Carregando o driver JDBC para um determinado SGBD */
            System.out.println("Inserindo dados....");

            //INSERT na tabela Movimentacao

             PreparedStatement insere = con.prepareStatement("insert into movimentacao (codigo_funcionario,"
             + "codigo_produto,setor_destino,data_movimentacao,observacao) VALUES (?,?,?,?,?)   ");
            

            String codigoFuncionario = ("16");
            String codigoProduto = jTextField1.getText();
            String setorDestino = jTextField2.getText();
            String dataMovimentacao = jTextField5.getText();
            String observacao = jTextArea1.getText();
            String estado = jComboBox1.getSelectedItem().toString();

            insere.setString(1, codigoFuncionario);
            insere.setString(2, codigoProduto);
            insere.setString(3, setorDestino);
            insere.setString(4, dataMovimentacao);
            insere.setString(5, observacao);
           
            insere.executeUpdate();

            //UPDATE na tabela Produtos
            String sql = " UPDATE produtos set estado='"+jComboBox1.getSelectedItem()+"' where codigo_produto='"+jTextField1.getText()+"'";

            PreparedStatement ps = con.prepareStatement(sql);
            ps.executeUpdate();

...

Muito obrigado pela ajuda… Espero que esse problema possa ajudar outras pessoas.

Abraço

Criado 21 de julho de 2011
Ultima resposta 21 de jul. de 2011
Respostas 12
Participantes 3