Olá pessoal.
Tô com um problema.
tenho um formulário, onde o usuário digita qual sua pretenção salarial. O usuário pode digitar da seguinte forma: 4.600,00, só que o campo do salário na base é do tipo numérico, ou seja, eu tenho que remover os pontos e a virgula.
Eu criei uma classe auxiliar para fazer isso. Essa classe tem o seguinte método stática:
public static String removePonto( Object objeto ){
//Aqui o usuário receberá
if ( objeto instanceof String ){
String valor = objeto.toString();
//retira todos os pontos
valor = valor.replace('.','\u0000');
//recupera a posição da virgula, caso haja uma
int virgula = valor.indexOf(",");
if ( virgula > 0 ){
//caso encontre uma virgula, removerá tudo o que estiver depois dela.
valor = valor.substring( 0, virgula );
}//fim if virgula > 0
return valor.trim();
}//fim if instanceof String
return "0";
}//fim do método removePonto
Bem, quando eu coloco essa String retornada na minha instrução SQL, ela dá o seguinte errro: Incorrect syntax near ‘200’..
Minha instrução fica montada desta forma no tempo de execução:UPDATE CANDI SET SALARIO = 4600, TIPO = ‘1’, CARGO = ‘00041’, VIAGENS = ‘S’, AREA = ‘Informática’ WHERE CPF = ‘333333333’.
Creio que o problema está no meu método removePonto, pois eu já criei uma String chamada salário a atribui a ela 3500 (String salario = “3500” e a coloquei na minha instrução ( String sql = "CANDI SET SALARIO = “+ salario + " TIPO…” e funcionou.
Alguém sabe o que está acontecendo???
[size=“11”][color=“red”]* Editado: Lembre-se de utilizar BBCode em seus códigos - Matheus[/color][/size] :joia:
pra inserir string em sql vc deve coloca-las entre aspas simples… vc fez isso?!
String sql = "insert into mytable (nome) values ('"+ valor + "')";
ou entao utilize PreparedStatement ao inves de Statement, pois ele prove metodos do tipo: setString, setDate, etc… e faz a conversao pra vc
O campo na base é do tipo numérico, por isso estou inserindo sem as aspas, mas quando esse String é retornado pelo meu método, ele não funciona, mas quando eu coloco outra String, que não venha do médo, ele funciona.
cara aqui acho que passe direto sem condicional
valor = valor.replace(’.’,’\u0000’);
se eu não tiver pontos será que não da problema???
Coloque um systemOut na saida e veja o que ele retorna dessa string…Não sei se é isso…
Veja também ops campos no sql
String ‘" "’
inteiro " "
O problema estava no valor.replace(’.’,’\u0000’).
Eu tentei usar o valor.replaceAll(".",""), mas ele estava me retornando um valor em branco, ou seja, por algum motivo, ele estava substituindo tudo por nada!!! Vocês me entenderam né???
Bem, então eu criei um outro método, e ao invés de chamar o método replace de String, eu estou chamando meu método. Ex:
valor = myReplaceAll(valor);
private static String myReplaceAll( String obj ){
int tamanho = obj.length();
StringBuffer sb = new StringBuffer();
for( int i = 0; i < tamanho ; ++i ){
if( obj.charAt(i)!='.' ){
sb.append(obj.charAt(i));
}
}//fim for
return sb.toString();
}
Agora sim, está funcionando.
:dedao:
[size=“11”][color=“red”]* Editado: Lembre-se de utilizar BBCode em seus códigos[/color][/size] :joia:
Eh q o método replaceAll utiliza uma expressão regular para substituir, e se nao me engano o . (ponto) significa um caracter qq, então vc ta mandando substituir um caracter qq por nada, e como todo caracter eh um caracter qq, o retorno será nada… Entendeu a lógica?!?