[RESOLVIDO] Campo salário dando erro no MySQL

Gente boa, cheguei agora aqui no Forum e esse é o meu 1º tópico!
Preciso da ajuda de vocês…

Estou com uma aplicação dando problema quando tento salvar os valores no banco.
Quando abro a tela, os campos já vem preenchidos com o primeiro registro da tabela,
porém só de tentar salvar sem alterar nada já está dando o erro!
Vejam o código:

private void Salvar_Update() {
        String editarFun = null;
        int vcargo = 0, vsetor = 0;
        vcargo = cbCargo.getSelectedIndex();
        vsetor = cbSetor.getSelectedIndex();
        try {
            int cod_fun = 0;
            cod_fun = Tfun.rs.getInt("FUN_COD");
            editarFun = "UPDATE FUNCIONARIOS SET FUN_NOME ='" + txNome.getText() + "',FUN_CPF='"
                    + txCPF.getText() + "', FUN_RG='" + txRG.getText() + "', FUN_CEP='"
                    + txCEP.getText() + "', FUN_NUMERO='" + txNumero.getText() + "', FUN_COMPLE='"
                    + txComple.getText() + "', FUN_TEL='" + txTele.getText() + "', FUN_CARGO='"
                    + vcargo + "', FUN_SETOR='" + vsetor + "', FUN_SALARIO='" + txSalario
                    + "', FUN_SEXO='" + sexo + "'"
                    + " WHERE FUN_COD=" + cod_fun + ";";
            Tfun.st.executeUpdate(editarFun);
            JOptionPane.showMessageDialog(null, "Cliente alterado com Sucesso!!!");
            Tfun.exeSQL("SELECT * FROM CLIENTE");
        } catch (SQLException erro) {
            JOptionPane.showMessageDialog(null, "Erro ao Salvar!" + "\n" + erro + "\n" + editarFun);
        }
    }

O campo salário lá no banco é DOUBLE.
Quando tento salvar, o erro apresentado é o seguinte:

Deu pra entender, galera? Alguém pode me ajudar?
Valeu!

Sistemas utilizados: NetBeans 6.9.1, MySQL 5.1.35

Da um System.out.println no txSalario.

Tente remover a aspa simples em FUN_SALARIO=’" + txSalario + "’

Outra coisa, use PreparedStatement ao inves de Statement.

Talvez você esteja tentando colocar um valor além da capacidade do campo. Veja quantas casas decimais está passando.

Olá brunokchimbo,

Complementando as dicas dos colegas, sugiro a adoção do tipo decimal, ao invés de double, pois, double não tem precisão, já decimal tem.

Veja este post: http://paposql.blogspot.com.br/2011/10/como-armazenar-informacoes-do-tipo.html

Abraços.

_ _
Fabiano Abreu
Papo Sql - Um blog com tutoriais, dicas e truques sobre SQL

Sei que voce está começando, mas estuda sobre PreparedStatement, irá lhe ajudar muito.

Abaixo segue uma classe que uso como padrao. Tente implementa-la futuramente:

[code]package Utilitarios;

import java.sql.Connection;
import java.sql.SQLException;
import com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.annotations.Annotations;
import com.thoughtworks.xstream.io.xml.DomDriver;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.DriverManager;
import java.text.SimpleDateFormat;
import java.sql.Date;
import java.sql.Types;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;

public class Conexao{

static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static String DATABASE_URL = "";
Connection connection = null; // gerencia a conexão
PreparedStatement pstmt = null;
public ResultSet resultset;


public void conectar(){

    try {
        DATABASE_URL = "jdbc:mysql://localhost/bancodedados";

        Class.forName(JDBC_DRIVER);

        // estabelece conexão com o banco de dados
        connection = DriverManager.getConnection( DATABASE_URL, "root", "minhasenhaaqui" );
        
    } catch (ClassNotFoundException ex) { 
        ex.printStackTrace();
    } catch (SQLException ex) { 
        ex.printStackTrace();
    }
}

public void desconectar(){
    try                                                        
     {                                                          
        //statement.close();                                      
        connection.close();                                     
     }
     catch ( NullPointerException exception )                              
     {                                                          
        exception.printStackTrace();
     }
    catch ( Exception exception )                              
     {                                                          
        exception.printStackTrace();
     }
}

public void update(String sql, Object dados[]){
    try {
        // cria Statement para consultar banco de dados
        pstmt = connection.prepareStatement(sql);
        
        for(int i = 0; i < dados.length; i++){
            if(dados[i] instanceof Integer){
                pstmt.setInt(i+1, Integer.parseInt(String.valueOf(dados[i])));
            } else if(dados[i] instanceof String)
            {
                pstmt.setString(i+1, (String) dados[i]);
            } else if(dados[i] instanceof Date){
                pstmt.setDate(i+1, (java.sql.Date)dados[i]);
            } else if(dados[i] instanceof Float){
                pstmt.setFloat(i+1, Float.parseFloat(String.valueOf(dados[i])));
            } else if(dados[i] == null){
                pstmt.setNull(i+1, Types.DATE);
            }
        }
        
        //pstmt.setString(1, "Teste");
        pstmt.executeUpdate();
        
        
    } catch (SQLException ex) {  
        ex.printStackTrace();
    }
}

public void select(String sql){
    try {
        // cria Statement para consultar banco de dados
        
        pstmt = connection.prepareStatement(sql);
        resultset = pstmt.executeQuery();
    } catch (com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException ex){
        ex.printStackTrace();
    } catch (SQLException ex) {
        ex.printStackTrace();
    }
    
}

public byte insert(String sql, Object dados[]){
    try {
        // cria Statement para consultar banco de dados
        pstmt = connection.prepareStatement(sql);
        
        for(int i = 0; i < dados.length; i++){
            if(dados[i] instanceof Integer){
                pstmt.setInt(i+1, Integer.parseInt(String.valueOf(dados[i])));
            } else if(dados[i] instanceof String)
            {
                pstmt.setString(i+1, (String) dados[i]);
            } else if(dados[i] instanceof Date){
                pstmt.setDate(i+1, (java.sql.Date)dados[i]);
            } else if(dados[i] instanceof Float){
                pstmt.setFloat(i+1, Float.parseFloat(String.valueOf(dados[i])));
            } else if(dados[i] == null){
                pstmt.setNull(i+1, Types.DATE);
            }
        }
        pstmt.executeUpdate();
        return 1;
    } catch (MySQLIntegrityConstraintViolationException ex) {  
        //Nesse caso, o item ja existe
        return 2;
    } catch (SQLException e){
        JOptionPane.showMessageDialog(null, "Algum erro inesperado ocorreu!");
        Logger.getLogger(Conexao.class.getName()).log(Level.SEVERE, null, e);
        return 3;
    }
}

public void delete(String sql){
    try {
        pstmt = connection.prepareStatement(sql);
        int deletados = pstmt.executeUpdate();
    } catch (SQLException ex) {
        Logger.getLogger(Conexao.class.getName()).log(Level.SEVERE, null, ex);
    }
}

}[/code]

Dei uma mexida nele para postar aqui visto que eu puxava algumas informações de um arquivo XML… se algo nao funcionar, provavelmente é isso… dai voce diz ai que eu arrumo pra voce…

Abraços

O campo txSalario é um campo texto? nao faltou ou .getText() ?

editarFun = "UPDATE FUNCIONARIOS SET FUN_NOME ='" + txNome.getText() + "',FUN_CPF='" + txCPF.getText() + "', FUN_RG='" + txRG.getText() + "', FUN_CEP='" + txCEP.getText() + "', FUN_NUMERO='" + txNumero.getText() + "', FUN_COMPLE='" + txComple.getText() + "', FUN_TEL='" + txTele.getText() + "', FUN_CARGO='" + vcargo + "', FUN_SETOR='" + vsetor + "', FUN_SALARIO='" + txSalario.getText() + "', FUN_SEXO='" + sexo + "'" + " WHERE FUN_COD=" + cod_fun + ";";

Valeu mesmo, galera! Principalmente ao Gleidson Henrique que teve o trabalho
de postar toda a sua classe aê no forum.

Bom, depois de ler a ultima resposta…

…fiz um pouco diferente do que me disse o Sem_Nome.
Em vez de dar o System.out.println, exibi toda a String na caixa do campo
txNome e depois colei no Word. :smiley:
Daí pude ver todos os erros da SQL.

O meu código ficou assim:

private void Salvar_Update() {
        String editarFun = null;
        int vcargo = 0, vsetor = 0;
        vcargo = cbCargo.getSelectedIndex();
        vsetor = cbSetor.getSelectedIndex();
        try {
            int cod_fun = 0;
            cod_fun = Tfun.rs.getInt("FUN_COD");
            editarFun = "UPDATE FUNCIONARIOS SET FUN_NOME ='" + txNome.getText() + "',FUN_CPF='"
                    + txCPF.getText() + "', FUN_RG='" + txRG.getText() + "', FUN_CEP='"
                    + txCEP.getText() + "', FUN_NUMERO='" + txNumero.getText() + "', FUN_COMPLE='"
                    + txComple.getText() + "', FUN_TEL='" + txTele.getText() + "', FUN_CARGO='"
                    + vcargo + "', FUN_SETOR='" + vsetor + "', FUN_SALARIO='" + txSalario.getText()
                    + "', FUN_SEXO='" + sexo + "'"
                    + " WHERE FUN_COD=" + cod_fun + ";";
            Tfun.st.executeUpdate(editarFun);
            JOptionPane.showMessageDialog(null, "FUNCIONARIO alterado com Sucesso!!!");
            Tfun.exeSQL("SELECT * FROM FUNCIONARIOS");
        } catch (SQLException erro) {
            JOptionPane.showMessageDialog(null, "Erro ao Salvar!" + "\n" + erro + "\n" + editarFun);
        }
        txNome.setText(editarFun);
    }

Mais uma vez, grato a todos!

Não use concatenação de strings, isso além de não ser performático, pois a cada concatenação você cria uma 3 string, permite SQL Injection.
Use uma classe como StringBuilder e use o método append.

http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/StringBuilder.html

E use preparedStatement como alguém falou.
Ficará mais legível.

Por fim faltou fechar o statement e a connection em um bloco finally, ou usar o fechamento automático de recursos do java 7.