Erro mysql ao atualizar dados

8 respostas
diegorosa

Então pessoal o problema é o seguinte criei uma agenda que acessa um banco de dados em mysql mas quando vou testala a classe que insere e atualiza os dados no banco acusa um
erro no mysql e não consegui identificar o erro alguém pode me dar uma luz? a mensagem de erro que aparece é: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 ‘’’ at line 1

segue a classe que atualiza o dados no banco

package daoo;
import java.sql.*;
import java.util.Vector;

import javax.swing.JOptionPane;

import agenda.Dados;
import dao.conexao.conexao;

public class daooDados {
	// Configura essas variáveis de acordo com o seu banco  
	   private final String URL = "jdbc:mysql://localhost/crud",   
	         NOME = "root", SENHA = "diego";  

	   private Connection con;  
	   private Statement comando;  

	   public void apagar(String nome) {  
	      conectar();  
	      try {  
	         comando  
	               .executeUpdate("DELETE FROM pessoa WHERE nome = '" + nome  
	                     + "';");  
	      } catch (SQLException e) {  
	         imprimeErro("Erro ao apagar pessoas", e.getMessage());  
	      } finally {  
	         fechar();  
	      }  
	   }  
	  
	   public Vector<Dados> buscarTodos() {  
	      conectar();  
	      Vector<Dados> resultados = new Vector<Dados>();  
	      ResultSet rs;  
	      try {  
	         rs = comando.executeQuery("SELECT * FROM Dados");  
	         while (rs.next()) {  
	            Dados temp = new Dados();  
	            // pega todos os atributos da pessoa  
	            temp.setnome(rs.getString("nome"));
	            temp.setsexo(rs.getString("sexo"));
	            temp.setidade(rs.getInt("idade"));
	            temp.setendereco(rs.getString("endereco"));
	            temp.setcidade(rs.getString("cidade"));  
	            temp.setestado(rs.getString("estado")); 
	            temp.settelefone(rs.getString("telefone"));
	            resultados.add(temp);  
	         }  
	         return resultados;  
	      } catch (SQLException e) {  
	         imprimeErro("Erro ao buscar pessoas", e.getMessage());  
	         return null;  
	      }  
	   }  
	  
	   public void atualizar(Dados dados) {  
	      conectar();  
	      String com = "UPDATE pessoa SET nome = '" + dados.getnome()  
	            + "', idade =" + dados.getnome() + ", cidade = '"  
	            + dados.getcidade() + "', estado ='" + dados.getestado()  
	            + "' WHERE  nome = '" + dados.getnome() + "';";  
	      System.out.println("Atualizada!");  
	      try {  
	         comando.executeUpdate(com);  
	      } catch (SQLException e) {  
	         e.printStackTrace();  
	      } finally {  
	         fechar();  
	      }  
	   }  
	  
	   public Vector<Dados> buscar(String nome) {  
	      conectar();  
	      Vector<Dados> resultados = new Vector<Dados>();  
	      ResultSet rs;  
	      try {  
	         rs = comando.executeQuery("SELECT * FROM pessoa WHERE nome LIKE '"  
	               + nome + "%';"); 
	         while (rs.next()) {  
	            Dados temp = new Dados();  
	            // pega todos os atributos da pessoa  
	            temp.setnome(rs.getString("nome"));  
	            temp.setsexo(rs.getString("sexo"));
	            temp.setidade(rs.getInt("idade"));
	            temp.setendereco(rs.getString("endereco"));
	            temp.setcidade(rs.getString("cidade"));  
	            temp.setestado(rs.getString("estado"));
	            temp.settelefone(rs.getString("telefone"));
	            resultados.add(temp);  
	         }  
	         return resultados;  
	      } catch (SQLException e) {  
	         imprimeErro("Erro ao buscar pessoa", e.getMessage());  
	         return null;  
	      }  
	  
	   }  
	  
	   public void insere(Dados dados){  
	      conectar();  
	      try {  
	         comando.executeUpdate("INSERT INTO Pessoa VALUES('"  
	               + dados.getnome() + "','" + dados.getsexo() + "','"  
	               + dados.getidade() + "','" + dados.getendereco()+ "','" + dados.getcidade() + "','"  
	               + dados.getestado() + "','" + dados.gettelefone()+ "','") ;  
	         System.out.println("Inserida!");  
	      } catch (SQLException e) {  
	         imprimeErro("Erro ao inserir Pessoa", e.getMessage());  
	      } finally {  
	         fechar();  
	      }  
	   }  
	  
	   private void conectar() {  
	      try {  
	         con = conexao.conexao(URL, NOME, SENHA, conexao.MYSQL);  
	         comando = con.createStatement();  
	         System.out.println("Conectado!");  
	      } catch (ClassNotFoundException e) {  
	         imprimeErro("Erro ao carregar o driver", e.getMessage());  
	      } catch (SQLException e) {  
	         imprimeErro("Erro ao conectar", e.getMessage());  
	      }  
	   }  
	  
	   private void fechar() {  
	      try {  
	         comando.close();  
	         con.close();  
	         System.out.println("Conexão Fechada");  
	      } catch (SQLException e) {  
	         imprimeErro("Erro ao fechar conexão", e.getMessage());  
	      }  
	   }  
	  
	   private void imprimeErro(String msg, String msgErro) {  
	      JOptionPane.showMessageDialog(null, msg, "Erro crítico", 0);  
	      System.err.println(msg);  
	      System.out.println(msgErro);  
	      System.exit(0);  
	   }  
	}

8 Respostas

drsmachado

Primeiro, uma dica, abandone o Statement e comece a utilizar o PreparedStatement.
Ele limpa teu código e previne erros desta natureza.
Bom, o erro está sendo apresentado pois você coloca uma vírgula no final da tua query, após gettelefone():

comando.executeUpdate("INSERT INTO Pessoa VALUES('"     
                   + dados.getnome() + "','" + dados.getsexo() + "','"     
                   + dados.getidade() + "','" + dados.getendereco()+ "','" + dados.getcidade() + "','"     
                   + dados.getestado() + "','" + dados.gettelefone()+ "','") ;

Como não há nada após a vírgula, o mysql entende que a instrução não foi encerrada, sendo assim, o erro é lançado.

Pesquise sobre preparedStatement, é bem mais simples e funcional.

diegorosa

valeu cara vou pesquisar oque vc recomendou

T

Se você não quiser mais passar esses problemas de ficar concatenando string para fazer crud no banco de dados com jdbc puro, da uma pesquisada em JPA2. Com ele seu trabalho com BD vai diminuir muito. Da pra pensar mais nas suas classes do que no banco propriamente dito quando sua aplicação não for muito grande.

marcospaulo.suporte

O Código corrigido seria:

public void insere(Dados dados){    
          conectar();    
          try {    
             comando.executeUpdate("INSERT INTO Pessoa VALUES('"    
                   + dados.getnome() + "','" + dados.getsexo() + "','"    
                   + dados.getidade() + "','" + dados.getendereco()+ "','" + dados.getcidade() + "','"    
                   + dados.getestado() + "','" + dados.gettelefone()+ "';") ;    
             System.out.println("Inserida!");    
          } catch (SQLException e) {    
             imprimeErro("Erro ao inserir Pessoa", e.getMessage());    
          } finally {    
             fechar();    
          }    
       }

o Erro foi no " ’ " depois da virgula em ‘dados.gettelefone()

Tradução do Erro: Você tem um erro em sua sintaxe SQL; verifique o manual que corresponde à sua versão do servidor MySQL para a sintaxe correta no uso perto ’ ’ ’ na linha 1

drsmachado

marcospaulo.suporte:
O Código corrigido seria:

public void insere(Dados dados){    
          conectar();    
          try {    
             comando.executeUpdate("INSERT INTO Pessoa VALUES('"    
                   + dados.getnome() + "','" + dados.getsexo() + "','"    
                   + dados.getidade() + "','" + dados.getendereco()+ "','" + dados.getcidade() + "','"    
                   + dados.getestado() + "','" + dados.gettelefone()+ "';") ;    
             System.out.println("Inserida!");    
          } catch (SQLException e) {    
             imprimeErro("Erro ao inserir Pessoa", e.getMessage());    
          } finally {    
             fechar();    
          }    
       }

o Erro foi no " ’ " depois da virgula em ‘dados.gettelefone()

Tradução do Erro: Você tem um erro em sua sintaxe SQL; verifique o manual que corresponde à sua versão do servidor MySQL para a sintaxe correta no uso perto ’ ’ ’ na linha 1


Discordo, marcospaulo.
O erro estava na vírgula.
Tente executar uma query no MySql (ou oracle ou MSSQL Server) colocando uma vírgula no final, sem nada depois dela.
Você receberá um erro, pois o interpretador do SGBD espera que alguma coisa a mais seja informada, uma vez que o código não foi encerrado corretamente,
Cada SGBD irá lançar um erro conforme está programado.
A maneira do mysql lançar o erro, às vezes, dá margens para dúvidas.

Outra coisa que me chamou a atenção foi o uso de “;” dentro da String.
Simplesmente por que eu nunca utilizei isso nos meus quase 5 anos com programação.
Vivendo e aprendendo.

nel
drsmachado:
marcospaulo.suporte:
O Código corrigido seria:
public void insere(Dados dados){    
          conectar();    
          try {    
             comando.executeUpdate("INSERT INTO Pessoa VALUES('"    
                   + dados.getnome() + "','" + dados.getsexo() + "','"    
                   + dados.getidade() + "','" + dados.getendereco()+ "','" + dados.getcidade() + "','"    
                   + dados.getestado() + "','" + dados.gettelefone()+ "';") ;    
             System.out.println("Inserida!");    
          } catch (SQLException e) {    
             imprimeErro("Erro ao inserir Pessoa", e.getMessage());    
          } finally {    
             fechar();    
          }    
       }

o Erro foi no " ' " depois da virgula em 'dados.gettelefone()'

Tradução do Erro: Você tem um erro em sua sintaxe SQL; verifique o manual que corresponde à sua versão do servidor MySQL para a sintaxe correta no uso perto ' ' ' na linha 1


Discordo, marcospaulo.
O erro estava na vírgula.
Tente executar uma query no MySql (ou oracle ou MSSQL Server) colocando uma vírgula no final, sem nada depois dela.
Você receberá um erro, pois o interpretador do SGBD espera que alguma coisa a mais seja informada, uma vez que o código não foi encerrado corretamente,
Cada SGBD irá lançar um erro conforme está programado.
A maneira do mysql lançar o erro, às vezes, dá margens para dúvidas.

Outra coisa que me chamou a atenção foi o uso de ";" dentro da String.
Simplesmente por que eu nunca utilizei isso nos meus quase 5 anos com programação.
Vivendo e aprendendo.

É por essas e outras que eu já postei aqui indicando a evitar o uso de INSERT, SELECT e etc que construa a query com seus respectivos valores em uma String. O ideal para evitar dores de cabeça como essa, é fazer algo simples e muito melhor como:

String query = "INSERT INTO Pessoa VALUES (? , ?,  ?) ";
//considere conn de Connection
PreparedStatement ps = conn.createPreparedStatement(query);
ps.setString(1, "Joao");
ps.setString(2, "20");
ps.setString(3, "Masculino");

int result = ps.executeUpdate();

System.out.println("Quantidade de linhas alteradas/inseridas: " + result);
ps.close();
diegorosa

bom pessoal eu corrigi este erro colocando o ) entre as aspas "')" com isto executou mas vou pesquisar mais um pouco mesmo outras maneira porque em seguida acusa outros erros na iserção dos dados no banco.
eu estou usando 4 classes segue pra vcs visualizarem melhor
package agenda;

public class Dados {
	
	  
	   private String nome; 
	   private String sexo;
	   private int idade;  
	   private String endereco;
	   private String estado;  
	   private String cidade;
	   private String telefone;
	   
	   public void setnome(String nome) {  
		      this.nome = nome;  
		   }  
	   public void setsexo(String sexo){
		   this.sexo = sexo;
	   }
	   public void setidade(int idade){
		   this.idade = idade;
	   }
	   public void setendereco( String endereco){
		   this.endereco = endereco;
	   }
	   public void setestado ( String estado){
		   this.estado = estado;
	   }
	   public void settelefone( String telefone){
		   this.telefone = telefone;
	   }
	   public void setcidade( String cidade){
		   this.cidade = cidade;
	   }
	public String getnome() {
		return this.nome;
	}
	public String getsexo() {  
		return this.sexo;  
	}
	public int getidade() {  
		return this.idade;  
	}  
	public String getendereco(){
		return this.endereco;
	}
	public String getcidade() {
		return this.cidade;
	}
	   
	public String getestado() {  
		return this.estado;  
	} 
	public String gettelefone(){
		return this.telefone;
	}
}
-------------------------------------------
package dao.conexao;
import java.sql.*;  

public class conexao {
	

	public static final int MYSQL = 0;  
	   private static final String MySQLDriver = "com.mysql.jdbc.Driver";
	  
	   public static Connection conexao(String url, String nome, String senha,  
	         int banco) throws ClassNotFoundException, SQLException {  
	      switch (banco) {        
	      case MYSQL:           
	         Class.forName(MySQLDriver);  
	         break;  
	      }  
	      return DriverManager.getConnection(url, nome, senha);  
	   }  
	}
-----------------------------------------
package daoo;
import java.sql.*;
import java.util.Vector;

import javax.swing.JOptionPane;

import agenda.Dados;
import dao.conexao.conexao;

public class daooDados {
	// variaveis de conexao 
	   private final String URL = "jdbc:mysql://localhost/agenda",   
	         NOME = "root", SENHA = "diego";  

	   private Connection con;  
	   private Statement comando;  

	   public void apagar(String nome) {  
	      conectar();  
	      try {  
	         comando  
	               .executeUpdate("DELETE FROM pessoa WHERE nome = '" + nome  
	                     + "';");  
	      } catch (SQLException e) {  
	         imprimeErro("Erro ao apagar pessoas", e.getMessage());  
	      } finally {  
	         fechar();  
	      }  
	   }  
	  
	   public Vector<Dados> buscarTodos() {  
	      conectar();  
	      Vector<Dados> resultados = new Vector<Dados>();  
	      ResultSet rs;  
	      try {  
	         rs = comando.executeQuery("SELECT * FROM Dados");  
	         while (rs.next()) {  
	            Dados temp = new Dados();  
	            // pega todos os atributos da pessoa  
	            temp.setnome(rs.getString("nome"));
	            temp.setsexo(rs.getString("sexo"));
	            temp.setidade(rs.getInt("idade"));
	            temp.setendereco(rs.getString("endereco"));
	            temp.setcidade(rs.getString("cidade"));  
	            temp.setestado(rs.getString("estado")); 
	            temp.settelefone(rs.getString("telefone"));
	            resultados.add(temp);  
	         }  
	         return resultados;  
	      } catch (SQLException e) {  
	         imprimeErro("Erro ao buscar pessoas", e.getMessage());  
	         return null;  
	      }  
	   }  
	  
	   public void atualizar(Dados dados) {  
	      conectar();  
	      String com = "UPDATE pessoa SET nome = '" + dados.getnome()  
	            + "', idade =" + dados.getnome() + ", cidade = '"  
	            + dados.getcidade() + "', estado ='" + dados.getestado()  
	            + "' WHERE  nome = '" + dados.getnome() + "';";  
	      System.out.println("Atualizada!");  
	      try {  
	         comando.executeUpdate(com);  
	      } catch (SQLException e) {  
	         e.printStackTrace();  
	      } finally {  
	         fechar();  
	      }  
	   }  
	  
	   public Vector<Dados> buscar(String nome) {  
	      conectar();  
	      Vector<Dados> resultados = new Vector<Dados>();  
	      ResultSet rs;  
	      try {  
	         rs = comando.executeQuery("SELECT * FROM pessoa WHERE nome LIKE '"  
	               + nome + "%';"); 
	         while (rs.next()) {  
	            Dados temp = new Dados();  
	            // pega todos os atributos da pessoa  
	            temp.setnome(rs.getString("nome"));  
	            temp.setsexo(rs.getString("sexo"));
	            temp.setidade(rs.getInt("idade"));
	            temp.setendereco(rs.getString("endereco"));
	            temp.setcidade(rs.getString("cidade"));  
	            temp.setestado(rs.getString("estado"));
	            temp.settelefone(rs.getString("telefone"));
	            resultados.add(temp);  
	         }  
	         return resultados;  
	      } catch (SQLException e) {  
	         imprimeErro("Erro ao buscar pessoa", e.getMessage());  
	         return null;  
	      }  
	  
	   }  
	  
	   public void insere(Dados dados){  
	      conectar();  
	      try {  
	         comando.executeUpdate("INSERT INTO pessoa VALUES('"  
	               + dados.getnome() + "','" + dados.getsexo() + "','"  
	               + dados.getidade() + "','" + dados.getendereco()+ "','" + dados.getcidade() + "','"  
	               + dados.getestado() + "','" + dados.gettelefone()+ "')") ;  
	         System.out.println("Inserida!");  
	      } catch (SQLException e) {  
	         imprimeErro("Erro ao inserir Pessoa", e.getMessage());  
	      } finally {  
	         fechar();  
	      }  
	   }  
	  
	   private void conectar() {  
	      try {  
	         con = conexao.conexao(URL, NOME, SENHA, conexao.MYSQL);  
	         comando = con.createStatement();  
	         System.out.println("Conectado!");  
	      } catch (ClassNotFoundException e) {  
	         imprimeErro("Erro ao carregar o driver", e.getMessage());  
	      } catch (SQLException e) {  
	         imprimeErro("Erro ao conectar", e.getMessage());  
	      }  
	   }  
	  
	   private void fechar() {  
	      try {  
	         comando.close();  
	         con.close();  
	         System.out.println("Conexão Fechada");  
	      } catch (SQLException e) {  
	         imprimeErro("Erro ao fechar conexão", e.getMessage());  
	      }  
	   }  
	  
	   private void imprimeErro(String msg, String msgErro) {  
	      JOptionPane.showMessageDialog(null, msg, "Erro crítico", 0);  
	      System.err.println(msg);  
	      System.out.println(msgErro);  
	      System.exit(0);  
	   }  
	}
-----------------------------------------
import java.util.Iterator;
import java.util.Vector;


import daoo.daooDados;

import agenda.Dados;
public class TesteAgenda {

    public static void main(String[] args) {  
       Dados dados = new Dados();  
       daooDados daooDados = new daooDados(); 
       
       dados.setnome("José da Silva");  
       dados.setsexo("masculino");  
       dados.setidade(20);
       dados.setendereco("rua roberto , 285");
       dados.setestado("SP");  
       dados.setcidade("São Paulo"); 
       dados.settelefone("39011749");
       
       daooDados.insere(dados);  
  
       Vector<Dados> resultado = daooDados.buscar("José da Silva");  
   
       for (Iterator<Dados> iterator = resultado.iterator(); iterator  
             .hasNext();) {  
          Dados p = iterator.next();  
          System.out.println("Pessoa Encontrada: " + p.getnome());  
       }  
       dados.setnome("José da Silva Sauro");  
   
       daooDados.atualizar(dados);  
   
       resultado = daooDados.buscar("José da Silva");  
   
       for (Iterator<Dados> iterator = resultado.iterator(); iterator  
             .hasNext();) {  
          Dados p = iterator.next();  
          System.out.println("Pessoa Encontrada: " + p.getnome());  
       }  
   
       daooDados.apagar("José da Silva");  
   
       resultado = daooDados.buscar("José da Silva");  
   
       if (resultado.size() == 0) {  
          System.out.println("Pessoa foi apagada com sucesso");  
       } else {  
          System.out.println("A pessoa permanece no banco de dados");  
       }  
   
    }  
   

}
marcospaulo.suporte

É amigos… vcs estão certos… me equivoquei,

Criado 21 de setembro de 2011
Ultima resposta 22 de set. de 2011
Respostas 8
Participantes 5