Delete dando erro

19 respostas
adriano_kahn

Oi pessoal… Estou tendo um problema com o código abaixo:
Ele não deleta o registro digitado no JtextField ISBN e dá o erro:

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

        //Verifica se a ISBN foi digitada ou não
        if (txISBN.getText().length() == 0)
        {
            JOptionPane.showMessageDialog(rootPane, "Para remover é necessário digitar o ISBN", "Erro", 1);
        }

        else
        {
            int resp = JOptionPane.showConfirmDialog(rootPane, "Tem certeza que deseja remover esse registro?", "Remover registro", 2);

            if (resp == 0)
            {
                codISBN = Integer.parseInt(this.txISBN.getText());
                titulo = txTitulo.getText();
                edicao = Integer.parseInt(this.txEdicao.getText());
                ano = txAno.getText();

                String strSQL = "DELETE FROM Livros "+
                                "WHERE codISBN = ?";


                try
                {
                    PreparedStatement stmt = conn.prepareStatement(strSQL);

                    stmt.setInt(1, codISBN);
                    stmt.setString(2, titulo);
                    stmt.setInt(3, edicao);
                    stmt.setString(4, ano);

                    stmt.execute();
                    stmt.close();
                    conn.close();
                }

                catch (SQLException sqlex)
                {
                    sqlex.getMessage();
                }
            }
        }
    }

e ele dá o seguinte erro

run:

Sucesso na conexão!!

Exception in thread AWT-EventQueue-0 java.lang.NumberFormatException: For input string: “”

at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)

at java.lang.Integer.parseInt(Integer.java:470)

at java.lang.Integer.parseInt(Integer.java:499)

at GUI.ManipulaLivros.btRemoverActionPerformed(ManipulaLivros.java:198)

at GUI.ManipulaLivros.access$100(ManipulaLivros.java:24)

at GUI.ManipulaLivros$2.actionPerformed(ManipulaLivros.java:131)

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:6263)

at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)

at java.awt.Component.processEvent(Component.java:6028)

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:4574)

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)

CONSTRUÍDO COM SUCESSO (tempo total: 20 segundos)

O que pode ser? pelo que vi, acredito que seja algo referente ao tipo de dados, más mexi e remexi e nada deu certo…

Obrigado e muito sucesso a todos!!!

19 Respostas

surfzera

cadê o parametro que vc envia para o seu SQL para remover o registro ? está faltando .

DELETE FROM Livros WHERE codISBN = ?

exemplo:

private final static String DELETE = "DELETE FROM usuario WHERE id=?";

public void apagar(Integer id) {
		if (id == null) {
			throw new IllegalArgumentException("É obrigatório especificar um Usuário!");
		} else {
			jdbcTemplate.update(DELETE, id);
		}
	}
adriano_kahn
oi Surfzera... creio que não esteja errado essa parte da chamada, pois olha como fiz em outra tabela e que está dando certo:
private void btRemoverActionPerformed(java.awt.event.ActionEvent evt) {                                          
        // TODO add your handling code here:

        //Verifica se não foi digitado nada
        if ((txNome.getText().length() == 0) && (txSobrenome.getText().length() ==0))
        {
            JOptionPane.showMessageDialog(rootPane, "Digite o nome e sobrenome autor");
        } //fim do if

        else
        {
            //ShowConfirmDialog retorna inteiro dependendo da opção escolhida
            int resp = JOptionPane.showConfirmDialog(rootPane, "Tem certeza"+
                                "que deseja excuir esse registro?");

            if (resp == 0)
            {
                nome = txNome.getText();
                sobrenome = txSobrenome.getText();
                
                String strSQL = "DELETE FROM Autor where nome = ? "+
                                "AND sobrenome = ?";

                try
                {
                    PreparedStatement stmt = conn.prepareStatement(strSQL);
                    stmt.setString(1, nome);
                    stmt.setString(2, sobrenome);
                    
                    System.out.println(stmt.toString());
                    
                    stmt.execute();

                    stmt.close();
                    conn.close();
                }

                catch (SQLException e)
                {
                    e.getMessage();
                }
            }
        }

    }

Como disse anteriormente, acho que é no tipo de dados...

surfzera

esse codigo é uma inteiro ou uma string ?

surfzera

ops desculpe é inteiro … talvez ele esteja esperando um string tenta converter ele.

adriano_kahn

não… no banco de dados está como int…

F

Seguinte,
Na linha:

codISBN = Integer.parseInt(this.txISBN.getText());

a variável “this.txISBN.getText()” está recebendo um valor vazio por isso está dando esse erro. Verifique essa variável para ele receber um número e poste novamente.

adriano_kahn

como assim?
e o valor que eu digito no jtextField?
por isso creio que o problema é algo em conversão

F

Seguinte,
Debugue a sua aplicação e verifique o que está sendo armazenado nas variáveis “txISBN.getText()” e “txEdicao.getText()”.

J

int resp = Integer.parseInt(JOptionPane.showConfirmDialog(rootPane, "Tem certeza que deseja remover esse registro?", "Remover registro", 2)); tenta converter a resposta pra int...

L

vc esta usando padão mvc pro seu projeto ?

barney

adriano kahn:
como assim?
e o valor que eu digito no jtextField?
por isso creio que o problema é algo em conversão

nessas 2 linhas vc faz conversão

codISBN = Integer.parseInt(this.txISBN.getText());
edicao = Integer.parseInt(this.txEdicao.getText());

provável que você não esteja passando nada em um desses campos ele está pegando “”
por isso está ocorre o erro [color=red]NumberFormatException[/color]

dica: logo após a sua query…

String strSQL = "DELETE FROM Livros "+ "WHERE codISBN = ?";

faça assim…

String strSQL = "DELETE FROM Livros "+ "WHERE codISBN = ?"; System.out.println(strSQL);

e veja o que aparece no console :wink:

adriano_si

Cara… o erro está claro…

é o que o amigo em cima falou, tá tentando converter um “” em INTEGER… Não vai conseguir, faça o que o fshima falou, debuga a aplicação é vê o que está sendo setado no campo ISBN

Abs []

kenneth

Fala moçada…

Concordo, acho que o erro é porque voce esta tentando
converter uma string vazia “” para inteiro.

Faça um teste, coloque um 0 nesses campos que esta tentando converter.

Abraco!

adriano_kahn

mas eu nao quero digitar a edição para poder deletar, apenas o codISBN q é minha chave primaria. e quando faço o system.out.println(strSQL) ele me retorna a clausula DELETE q eu digitei

barney

cara eu sei o que o

System.out.println(strSQL);

retorna a sua string sql, se vc quer simplismente passar o codISBN deixe somente ele cimo parâmetro
tire os outros pois vc tem somente “?” indicando um único parâmetro na sua query pq vc passa 4 ???

aluisiodsv

Amigo olha bem a parte do PreparedStatement.

Voce tem um comando SQL de apenas UM parâmetro:

"DELETE FROM Livros WHERE codISBN = ?"

E no PreparedStatemente vc passa um monte de parâmetros:

stmt.setInt(1, codISBN);  
  stmt.setString(2, titulo);  
  stmt.setInt(3, edicao);  
  stmt.setString(4, ano);

O certo seria passar apenas um, no caso o codISBN. A quantidade de parâmetros deve ser a mesma quantidade de ‘?’ no seu SQL.

Lucas_Abbatepaolo

Adriano…

O erro que vc está recebendo é :

Exception in thread “AWT-EventQueue-0” java.lang.NumberFormatException: For input string: “”

Isso significa que vc está tentando converter uma String vazia (For input string: “”) em um inteiro e isto é impossivel.

Ja no seu PreparedStatement vc esta criando ele de uma forma que espera 1 parametro:

"DELETE FROM Livros "+     
       "WHERE codISBN = ?";

entaum vc deviria passar somente 1 parametro para ela e vc está tentando passar 4…

Voce disse que quer guardar o que vc digita no textField…terá de ser de alguma outra forma e não passando ele como parametro …

kenneth

Certo…
Eu havia dito com o intuito apenas de testar, para ver se o erro esta realmente nesta conversao.

Em todo caso, faça um tratamento antes de converter para inteiro, verifique se esta vazio ou nao.
Ou, nem mesmo faça a conversão, já que pra a exclusão, so é necessario o ISBN.

adriano_kahn
obrigado galera... Desculpe o amadorismo, mas é porque sou iniciante mesmo.. Se for para ajudar alguem que tenha a mesma dúvida, segue o código que utilizei.
private void btRemoverActionPerformed(java.awt.event.ActionEvent evt) {                                          

        //Verifica se a ISBN foi digitada ou não
        if (txISBN.getText().length() == 0)
        {
            JOptionPane.showMessageDialog(rootPane, "Para remover é necessário digitar o ISBN", "Erro", 1);
        }

        else
        {
            int resp = JOptionPane.showConfirmDialog(rootPane, "Tem certeza que deseja remover esse registro?", "Remover registro", 2);

            if (resp == 0)
            {
                codISBN = Integer.parseInt(this.txISBN.getText());

                String strSQL = "DELETE FROM Livros "+
                                "WHERE codIsbn = ?";


                try
                {
                    PreparedStatement stmt = conn.prepareStatement(strSQL);
                     
                    stmt.setInt(1, codISBN);
                   

                    stmt.execute();
                    stmt.close();
                    conn.close();
                }

                catch (SQLException sqlex)
                {
                    sqlex.getMessage();
                }
            }
        }
    }

Sucesso a TODOS

Criado 21 de dezembro de 2010
Ultima resposta 21 de dez. de 2010
Respostas 19
Participantes 10