Javafree
Página Inicial do Fórum > Banco de Dados - JDBC / SQL

Alterar tabela usando PreparedStatement



Criar novo tópico   Responder tópico


  1. DAndrade
    Posts:6


    Comment Arrow

    Publicado em: 13/10/2014 10:28:50

    Bom dia, eu sei que existem diversos tópicos no fórum que tratam a respeito desse assunto, eu li vários deles mas não encontrei nenhum que me ajudasse.
    Estou iniciando em java e estou tentando alterar os dados de uma tabela do MySql usando o PreparedStatement, mas sem êxito.
    Eu tenho o seguinte código:

    package br.com.jdbc;

    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.util.Scanner;

    public class AlteraEditora {

    public static void main(String[] args) {

    Scanner entrada = new Scanner(System.in);

    try {
    System.out.println("Abrindo a conexão...";
    Connection conexao = ConnectionFactory.createConnection();

    System.out.println("Informe o código a editora a ser alterada:";
    Integer cod = entrada.nextInt();

    String slct = "select * from editora where id =" + cod;
    PreparedStatement comando = conexao.prepareStatement(slct);

    System.out.println("Informe os campos a serem alterados: \n1: Nome\n2: Email ";
    Integer opc = entrada.nextInt();
    if (opc == 1) {
    System.out.println("Informe o novo nome:";
    String nome = entrada.nextLine();
    String updt = "update editora set nome= ? where id= ?";
    PreparedStatement cmd = conexao.prepareStatement(updt);
    cmd.setInt(1, cod);
    cmd.setString(2, nome);
    //cmd.setInt(3, cod);
    comando = conexao.prepareStatement(updt);
    comando.execute();
    }else if (opc == 2) {
    System.out.println("Informe o novo email:";
    String email = entrada.nextLine();
    String updt = "update editora set email= ? where id= ?";
    PreparedStatement cmd = conexao.prepareStatement(updt);
    cmd.setInt(1, cod);
    cmd.setString(2, email);
    cmd.setInt(3, cod);
    comando = conexao.prepareStatement(updt);
    comando.execute();
    }
    conexao.close();
    } catch (Exception e) {
    e.printStackTrace();
    }
    }

    }


    E ao executa-lo recebo o seguinte erro:

    Abrindo a conexão...
    Informe o código a editora a ser alterada:
    1
    Informe os campos a serem alterados:
    1: Nome
    2: Email
    2
    Informe o novo email:
    java.sql.SQLException: No value specified for parameter 1
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1086)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:975)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:920)
    at com.mysql.jdbc.PreparedStatement.checkAllParametersSet(PreparedStatement.java:2594)
    at com.mysql.jdbc.PreparedStatement.fillSendPacket(PreparedStatement.java:2569)
    at com.mysql.jdbc.PreparedStatement.fillSendPacket(PreparedStatement.java:2493)
    at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1316)
    at br.com.jdbc.AlteraEditora.main(AlteraEditora.java:42)


    Alguém poderia me dar uma dica de como resolver o problema?

    Valeu!
    _________________

    Diego M. Andrade
    Analista Desenvolvedor Jr



  1. staroski
    Posts:4599


    Comment Arrow

    Publicado em: 13/10/2014 11:11:22

    Apenas falta de atenção


    O certo seria assim

    _________________

    Ricardo Artur Staroski, OCP-JP
    Blumenau - SC
    Faço seu trabalho Java,
    clique aqui

    Acesse http://www.guj.com.br/



  1. DAndrade
    Posts:6


    Comment Arrow

    Publicado em: 13/10/2014 14:10:33

    Obrigado pela dica Staroski.
    Vou efetuar a alteração pra ver se resolve o problema!
    Valeu!!
    _________________

    Diego M. Andrade
    Analista Desenvolvedor Jr



  1. DAndrade
    Posts:6


    Comment Arrow

    Publicado em: 13/10/2014 15:31:50

    staroski, eu efetuei a alteração que você informou e realmente o erro deixou de existir.
    Mas ainda estou com problemas.
    A intenção dessa classe e alterar um registro da tabela editora.
    O primeiro passo é informar a editora a ser alterada:


    Depois, informar qual campo alterar: 1.Nome 2.Email:


    Se opção 1:


    Se opção 2:


    Final da classe:


    O problema é que o sistema encerra antes de eu fornecer o novo valor do campo escolhido.
    Você poderia me ajudar?
    _________________

    Diego M. Andrade
    Analista Desenvolvedor Jr



  1. staroski
    Posts:4599


    Comment Arrow

    Publicado em: 13/10/2014 18:10:38

    Cara, apaga essa sua variável 'comando'

    Novamente você está configurando um PreparedStatement com a variável 'cmd' mas está executando o PreparedStatement da variável 'comando'...

    Isso está me cheirando a Ctrl+C, Ctrl+V, mal feito.... HeHeHe


    Outra coisa, sua query tem dois parâmetros (duas interrogações), mas você só está setando um parâmetro
    _________________

    Ricardo Artur Staroski, OCP-JP
    Blumenau - SC
    Faço seu trabalho Java,
    clique aqui

    Acesse http://www.guj.com.br/



  1. DAndrade
    Posts:6


    Comment Arrow

    Publicado em: 14/10/2014 09:59:33

    staroski, apaguei a variável comando como você me orientou e alterei a método nextLine() do Scanner para next() e funcionou corretamente.
    O código ficou assim:



    Valeu pela ajuda!!
    Obrigado.
    _________________

    Diego M. Andrade
    Analista Desenvolvedor Jr



  1. Relacionados