Erro de syntax ao inserir no banco

2 respostas
M
Boa tarde pessoal! Estou tento um problema, ao inserir um registro no banco Postgres. Meu codigo é o seguinte:
String[] numNivel = nomMask.split("\\.");
       String posicao = numNivel[0];
       Integer numerador = 1;
       for (int i = 0; i < numNivel.length; i++) {                                                                                 
    
          stmt.executeUpdate("insert into tab_ctb_plano_config values ((SELECT COALESCE(MAX(num_nivel),0) + 1 FROM tab_ctb_plano_config)," + "'ATIVO NIVEL'".concat(Integer.toString(numerador)) + "," + "'D'" + ",'" + posicao + "','" + numerador + "','" + "P" + "')" );
          posicao = posicao + '.' + numNivel[i];
          numerador = numerador + 1;
       }

O meu problema está na parte + "'ATIVO NIVEL'".concat(Integer.toString(numerador)) +
Já tentei concatenar com + e houve o mesmo erro.

O erro que aparece é: Erro cmdo error syntax error at or near "1"

O que estou fazendo de errado?

Obrigado pela atenção de todos e tenham um bom dia

2 Respostas

R

Boa tarde marceloptc,
Te confesso que não intendi este insert.
Acredito que o erro está no fato de que o ‘ATIVO NIVEL’ utiliza aspas simples e vc tenta concatenar outro caractere…
Tente fazer desta forma

"((SELECT COALESCE(MAX(num_nivel),0) + 1 FROM tab_ctb_plano_config)," + "'ATIVO NIVEL"+numerador + "','D','" + posicao + "','" + numerador + "','P')"

Se tiver esta possibilidade, seria bom entrar em debug e antes de executar copiar a String do insert e colar no teu postgres pra ver melhor o erro de sintaxe.
Mas continuo achando muito estranho o insert ser desta forma (concatenar ATIVO NIVEL com um número “colado” =P), seria melhor ao menos utilizar o PreparedStatement e passar os parâmentros depois. oO
Tenha cautela em utilizar o operador + para concatenar String, o StringBuilder é mais indicado para estas operações.

M

rjbn_ valeu demais pela ajuda. Modifiquei um pouco e ficou assim:

stmt.executeUpdate("insert into tab_ctb_plano_config values ((SELECT COALESCE(MAX(num_nivel),0) + 1 FROM tab_ctb_plano_config)," + "'ATIVO NIVEL"+numerador + "'," + "'D'" + ",'" + posicao + "','" + numerador + "'," + "'P'" + ")" );

Vou atentar sobre o PreparedStatement.

Valeu demais amigo!

Criado 7 de fevereiro de 2013
Ultima resposta 7 de fev. de 2013
Respostas 2
Participantes 2