Erro na sintaxe SQL - MySQL [RESOLVIDO]

Bom dia a Todos!

Alguém poderia me dar uma luz?
Estou usando mysql e o seguinte codigo:

    [code]String sql = "UPDATE `analisa_db`.`contribuinte_cad`"
            + "SET `cod_emp` = ?,`razao_contribuinte` = ?,`cnpj_contribuinte` = ?,"
            + "`ie_contribuinte` = ?,`im_contribuinte` = ?,`endereco_contribuinte` = ?,"
            + "`num_contribuinte` = ?,`comple_contribuinte` = ?,`id_municipio` = ?,"
            + "`id_uf` = ?,`id_cnae` = ?,`tributacao_contribuinte` = ?,"
            + "`bairro_contribuinte` = ?,`tipo_contribuinte` = ?,"
            + "`tipoins_contribuinte` = ?,`telefone_contribuinte` = ?,"
            + "`id_pais` = ?,`id_login` = ?"
            + "WHERE id_contribuinte = ?;";[/code]

O sistema está sempre retornando um erro:

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 ‘id_contribuinte = 54448’ at line 1

O engraçado é que se eu usar no prompt eu consigo atualizar os dados…
Obrigado pela Ajuda!

Retira o ; de dentro do update

Primeiro, use StringBuilder

StringBuilder sql = new StringBuilder();
sql.append("UPDATE `analisa_db`.`contribuinte_cad` ");  
sql.append("SET `cod_emp` = ?, ");  
sql.append("`razao_contribuinte` = ?, ");  
sql.append("`cnpj_contribuinte` = ?, ");  
sql.append("`ie_contribuinte` = ?, ");  
sql.append("`im_contribuinte` = ?, ");  
sql.append("`endereco_contribuinte` = ?, ");  
sql.append("`num_contribuinte` = ?, ");  
sql.append("`comple_contribuinte` = ?, ");  
sql.append("`id_municipio` = ?, ");  
sql.append("`id_uf` = ?, ");  
sql.append("`id_cnae` = ?, ");  
sql.append("`tributacao_contribuinte` = ?, ");  
sql.append("`bairro_contribuinte` = ?, ");  
sql.append("`tipo_contribuinte` = ?, ");  
sql.append("`tipoins_contribuinte` = ?, ");  
sql.append("`telefone_contribuinte` = ?, ");  
sql.append("`id_pais` = ?, ");  
sql.append("`id_login` = ? ");  
sql.append("WHERE id_contribuinte = ? ");  

E para utilizar, basta chamar o método toString() do objeto StringBuilder gerado.

Segundo, você não precisa das aspas simples para o seu banco de dados entender que se trata de tabela.coluna.

Terceiro, a razão dos teus problemas é a falta de espaço entre as palavras reservadas e os nomes de colunas e variáveis
Veja este trecho

//Isto
"UPDATE `analisa_db`.`contribuinte_cad`"  
                + "SET `cod_emp` = ?..."
//Vai gerar a saída
UPDATE `analisa_db`.`contribuinte_cad`SET `cod_emp` = ?

Por isso é mais adequado usar StringBuilder e montar a query sem as aspas simples. Fica mais fácil ver onde está agrupado.

Isso não faz a menor diferença

obrigado drsmachado, problema resolvido!

Isso não faz a menor diferença[/quote]
Ainda esta semana tive um problema igual, mas em ORACLE, e era o ; que estava a mais.

E se estamos numa de não fazer diferença, usar o StringBuilder neste caso também não faz diferença nenhuma…

Isso não faz a menor diferença[/quote]
Ainda esta semana tive um problema igual, mas em ORACLE, e era o ; que estava a mais.

E se estamos numa de não fazer diferença, usar o StringBuilder neste caso também não faz diferença nenhuma…[/quote]
O cenário é específico e ele está usando MySQL, logo, não faz diferença manter ou não o ponto e vírgula na string que irá ser execxutada pelo banco.
O Oracle possui um comportamento diferente, por isso você teve que tomar esta atitude.

Com relação ao uso de StringBuilder, caso você não saiba, o ganho de desempenho pode chegar a até 30 vezes. Além do mais, o código fica muito mais limpo para quem lê.
Além do mais, o problema pode ter sido ocasionado pela utilização de String e da concatenação que este objeto exige (utilizando o operador +).
Concordo que a String era até pequena, pois a query é simples, mas, o dia que ele precisar criar uma query com mais de 1000 linhas, ele vai entender o por que de utilizar StringBuilder, não apenas pela legibilidade do código, mas, principalmente, pelo tempo que o processo todo tomará.

[quote=drsmachado]
Com relação ao uso de StringBuilder, caso você não saiba, o ganho de desempenho pode chegar a até 30 vezes. Além do mais, o código fica muito mais limpo para quem lê.
Além do mais, o problema pode ter sido ocasionado pela utilização de String e da concatenação que este objeto exige (utilizando o operador +).
Concordo que a String era até pequena, pois a query é simples, mas, o dia que ele precisar criar uma query com mais de 1000 linhas, ele vai entender o por que de utilizar StringBuilder, não apenas pela legibilidade do código, mas, principalmente, pelo tempo que o processo todo tomará.[/quote]
Isso não é verdade.

Neste caso usar StringBuilder e String tem exactamente o mesmo desempenho.

A concatenação é feita logo pelo compilador, uma vez que apenas são usadas constantes.
E, caso fossem usadas variaveis, o compilador também transformava em StringBuilder.

O que tu dizes é verdade quando temos a construção da string de forma condicional ou num ciclo. E aí sim, deve ser usado StringBuilder.

Query de 1000 linhas??? o.O
e eu me enrolando num query pequena assim…