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.
Roger75
Setembro 21, 2012, 10:07am
#3
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…
marcospaulo.suporte disse:
O campo txSalario é um campo texto? nao faltou ou .getText() ?
view plaincopy to clipboardprint?
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 + ";";
…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.
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.