[Resolvido] Update no banco de dados MySQL

12 respostas
ezbueno

Boa noite a todos!!!
Criei uma tabela chamada Alunos, onde devo, inserir, buscar, deletar e atualizar. O problema é que eu não estou conseguindo fazer o update. Alguém poderia me ajudar?
A tabela tem os seguintes campos: idAluno(INT(10)), endereco(VARCHAR(45)), cep(VARCHAR(10)), cidade(VARCHAR(45)), estado(VARCHAR(2)), pais(VARCHAR(45)), nmAluno(VARCHAR(45)).
Criei duas classes, Alunos, TestaAlunos, dentro da classe Alunos, eu fiz um switch para listar as opções de inserir, buscar, deletar e atualizar.
Abaixo segui o case, referente a classe alunos.

case 4:    
             JOptionPane.showMessageDialog(null,"Você Escolheu Atualizar Dados!","Modulo Atualizar",JOptionPane.QUESTION_MESSAGE);  
             String idAluno1 = JOptionPane.showInputDialog(null,"Digite o Código que Você quer Atualizar: ");  
             int codAluno1 = Integer.parseInt(idAluno1);  
             Banco.deletar(codAluno1);  
               
             JOptionPane.showMessageDialog(null,"Dados atualizados com Sucesso!","Atualizando...",JOptionPane.ERROR_MESSAGE);
             break;  
               
   
         default:  
             break;  
         }

E na classe TestaAlunos, o seguinte método, para realizar o UPDATE:

public boolean atualizar(String SQL, String codAluno) {  
		 SQL = "UPDATE alunos SET codAluno='"+123459+"', WHERE idAluno = " + codAluno;
         int linhas = 0;  
         try  
         {  
             System.out.println("Realizando atualização de dados....");  
             System.out.println("Instrucao SQL :: "+ SQL);  
               
             linhas = stmt.executeUpdate(SQL);  
             if(linhas > 0) return true;  
             else return false;  
         }  
           
         catch(SQLException e)  
         {  
             JOptionPane.showMessageDialog(null, "Erro!!! \n Ao tentar atualizar registros!! \n SQL :: " + e,"Erro Conexão BD",JOptionPane.INFORMATION_MESSAGE);  
             return false;  
         }  
           
           
     }

Alguém poderia me ajudar?

Vlw!

12 Respostas

Anime

Oi,

Qual é o erro?

Imprima o StackTrace…

catch(SQLException erro) {    
        JOptionPane.showMessageDialog(null,"Erro,ao listar");    
       erro.printStackTrace(); //isso vai imprimir a pilha de exceções no console, indicando, dentre outras informacoes, a linha que deu problema.    
    }
ezbueno

Não aparece mensagem de erro, mas ao invés de executar o código atualizar, executa o código do delete. Abaixo o código delete.

public boolean deletar(int codAluno) {  
           
     String query = "DELETE FROM alunos WHERE idAluno = " + codAluno;  
       
     int linhas = 0;  
         try  
         {  
             System.out.println("Deletando dados....");  
             System.out.println("Instrucao SQL :: "+ query);  
           
                 linhas = stmt.executeUpdate(query);  
                     if(linhas > 0) return true;  
                         else return false;  
         }  
       
         catch(SQLException e)  
         {  
             JOptionPane.showMessageDialog(null, "Erro!!! \n Ao tentar deletar registros!! \n SQL :: " + e,"Erro Conexão BD",JOptionPane.INFORMATION_MESSAGE);  
             return false;  
         }  
       
     }

Qual foi o meu erro?

Anime

Então, é dificil saber assim, mas acho que deve estar nesse seu switch case

case 4:      
                 JOptionPane.showMessageDialog(null,"Você Escolheu Atualizar Dados!","Modulo Atualizar",JOptionPane.QUESTION_MESSAGE);    
                 String idAluno1 = JOptionPane.showInputDialog(null,"Digite o Código que Você quer Atualizar: ");    
                 int codAluno1 = Integer.parseInt(idAluno1);    
                 Banco.deletar(codAluno1); // acho que é aqui   
                     
                 JOptionPane.showMessageDialog(null,"Dados atualizados com Sucesso!","Atualizando...",JOptionPane.ERROR_MESSAGE);  
                 break;    
                     
         
             default:    
                 break;    
             }
ezbueno

Se eu alterar desta maneira:

case 4:        
              JOptionPane.showMessageDialog(null,"Você Escolheu Atualizar Dados!","Modulo Atualizar",JOptionPane.QUESTION_MESSAGE);      
              String idAluno1 = JOptionPane.showInputDialog(null,"Digite o Código que Você quer Atualizar: ");      
              int codAluno1 = Integer.parseInt(idAluno1);      
              Banco.atualizar(codAluno1); //  erro....informa que é necessário criar o método atualizar do tipo int na Classe TestaAlunos  
                    
              JOptionPane.showMessageDialog(null,"Dados atualizados com Sucesso!","Atualizando...",JOptionPane.ERROR_MESSAGE);    
              break;

Mas o método já esta criado:

public boolean atualizar(String SQL, String codAluno) {  
    	
		 SQL = "UPDATE alunos SET codAluno='"+123459+"', WHERE idAluno = " + codAluno;
         int linhas = 0;  
         try  
         {  
             System.out.println("Realizando atualização de dados....");  
             System.out.println("Instrucao SQL :: "+ SQL);  
               
             linhas = stmt.executeUpdate(SQL);  
             if(linhas > 0) return true;  
             else return false;  
         }  
           
          catch(SQLException erro) {      
        	      JOptionPane.showMessageDialog(null,"Erro,ao listar");      
        	     erro.printStackTrace(); //isso vai imprimir a pilha de exceções no console, indicando, dentre outras informacoes, a linha que deu problema.      
        	  }
		return false;    
     }
Anime

Você declarou codAluno como String no atualizar…

Aqui tem um tutorial muito bom, da uma olhada…http://mballem.wordpress.com/2011/02/21/utilizando-swing-com-banco-de-dados/

JMARQ

O erro abaixo ocorre devido o método atualizar necessitar de dois parâmetros e você está passando apenas um, então faça um teste tirando o parâmetro SQL do método:

Banco.atualizar(codAluno1); // dá erro....informa que é necessário criar o método atualizar do tipo int na Classe TestaAlunos

Ficando assim:

public boolean atualizar(String codAluno) {    
      
     String SQL = "UPDATE alunos SET codAluno='"+123459+"', WHERE idAluno = " + codAluno;  
        int linhas = 0;    
        try    
        {    
            System.out.println("Realizando atualização de dados....");    
            System.out.println("Instrucao SQL :: "+ SQL);    
                
            linhas = stmt.executeUpdate(SQL);    
            if(linhas > 0) return true;    
            else return false;    
        }    
            
         catch(SQLException erro) {        
              JOptionPane.showMessageDialog(null,"Erro,ao listar");        
             erro.printStackTrace(); //isso vai imprimir a pilha de exceções no console, indicando, dentre outras informacoes, a linha que deu problema.        
          }  
    return false;      
    }
ViniGodoy

Movido para o fórum de Persistência. Por favor, leia atentamente a descrição dos fóruns antes de postar.
Além disso, evite postar títulos dos tópicos usando SOMENTE LETRAS MAIÚSCULAS.

ezbueno

Boa noite!

Eu fiz o teste conforme o JMARQ falou, mas continua apresentando erro. Veja as alterações.
Classe TestaAlunos

public boolean atualizar(int codAluno1) {      
    	            
    	         	String SQL = "UPDATE alunos SET codAluno='"+123459+"', WHERE idAluno = " + codAluno1;    
    	            int linhas = 0;      
    	            try      
    	            {      
    	                System.out.println("Realizando atualização de dados....");      
    	                System.out.println("Instrucao SQL :: "+ SQL);      
    	                      
    	               linhas = stmt.executeUpdate(SQL);      
    	               if(linhas > 0) return true;      
    	               else return false;      
    	           }      
    	                 
    	            catch(SQLException erro) {          
    	                 JOptionPane.showMessageDialog(null,"Erro,ao listar");          
    	                erro.printStackTrace(); //isso vai imprimir a pilha de exceções no console, indicando, dentre outras informacoes, a linha que deu problema.          
    	             }    
    	            return false;        
    	       }

E a alteração feita na classe Alunos:

case 4:    
             JOptionPane.showMessageDialog(null,"Você Escolheu Atualizar Dados!","Modulo Atualizar",JOptionPane.QUESTION_MESSAGE);  
             String idAluno1 = JOptionPane.showInputDialog(null,"Digite o ID que você quer Atualizar: ");  
             int codAluno1 = Integer.parseInt(idAluno1);  
             Banco.atualizar(codAluno1);  
               
             JOptionPane.showMessageDialog(null,"Dados atualizados com Sucesso!","Atualizando...",JOptionPane.ERROR_MESSAGE);
             break;

Abaixo o erro apresentado:

Realizando atualização de dados

Instrucao SQL :: UPDATE alunos SET codAluno=123459, WHERE idAluno = 1253

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 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 WHERE idAluno = 1253 at line 1

at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)

at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)

at java.lang.reflect.Constructor.newInstance(Unknown Source)

at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)

at com.mysql.jdbc.Util.getInstance(Util.java:386)

at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1052)

at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3597)

at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3529)

at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1990)

at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2151)

at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2619)

at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1698)

at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1617)

at aula10.TestaAlunos.atualizar(TestaAlunos.java:138)

at aula10.Alunos.main(Alunos.java:64)
Anime

Acho que vc já percebeu que tem um erro de sintaxe na sua condição SQL …

String SQL = "UPDATE alunos SET codAluno='"+123459+"', WHERE idAluno = " + codAluno1;
ViniGodoy

Não tem aquela vírgula antes do WHERE:

Se o codAluno for um inteiro, não terá as aspas simples também.

ezbueno

E ae galera!
Primeiramente queria agradecer a ajuda de vcs, achei o erro e fiz a correção. Abaixo o código alterado.

public boolean atualizar(int codAluno1) {      
    	            
    	         	String SQL = "UPDATE alunos SET idAluno='"+123459+"' WHERE idAluno = " + codAluno1;  // SET codAluno troquei por SET idAluno  
    	            int linhas = 0;      
    	            try      
    	            {      
    	                System.out.println("Realizando atualização de dados....");      
    	                System.out.println("Instrucao SQL :: "+ SQL);      
    	                      
    	               linhas = stmt.executeUpdate(SQL);      
    	               if(linhas > 0) return true;      
    	               else return false;      
    	           }      
    	                 
    	            catch(SQLException erro) {          
    	                 JOptionPane.showMessageDialog(null,"Erro,ao listar");          
    	                erro.printStackTrace(); //isso vai imprimir a pilha de exceções no console, indicando, dentre outras informacoes, a linha que deu problema.          
    	             }    
    	            return false;        
    	       }
Vingdel

OPS: Peço perdão, eu havia deixado a página aberta aqui e esqueci de atualizar para ver o que se seguiu no tópico e postei sem saber das novas postagens.

Sorry!

Criado 30 de maio de 2011
Ultima resposta 1 de jun. de 2011
Respostas 12
Participantes 5