Problema com a barra ( \ ) no comando Statment

2 respostas
danikms

Boa Tarde Pessoal,

Estou com um problema para inserir barras em um campo do MySql, estou usando somente o Statement e nao o PreparedStatement para consultar, inserir, remover, etc.

Preciso inserir esta informacao no banco \USIL100014ALT03.ndc.lucent.com\eus\ dessa maneira mesmo, tenho uma variavel assim:

private String servidor = “\\USIL100014ALT03.ndc.lucent.com\eus\”;

e na minha classe DAO assim:

tenho uma variavel:
private final String GRAVA_PACKAGE = “INSERT INTO tblpackage (id,nome,nome_package,servidor) VALUES(”;

stmt.executeUpdate(GRAVA_PACKAGE + pkg.getId() + “,’” + pkg.getNome() + “’,’” + pkg.getNomePackage() + “’,’” + pkg.getServidor()+ “’)”);

Já tentei colocar barra pra frente, varias outras maneiras mais o java da este 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 ‘’\USIL100014ALT03.ndc.lucent.com\eus’)’ at line 1

Se tirar as barras da variavel servidor ele grava de boa, o problema é a barra mesmo, acredito.

Pessoal, informo que já tentei buscar aqui nos foruns do GUJ mas nao consegui encontrar nada, por isso estou abrindo o topico, espero q nao seja duplicado.

Desde já, agradeço a ajuda.

2 Respostas

T

Use um PreparedStatement, que ele já toma conta dessas coisas chatas para você. Obviamente você tem de usar setString, não montar o SQL na mão.

Se não puder usar um PreparedStatement, então duplique as barras, porque elas são caracteres especiais para o MySQL. Algo como:

String servidorComBarrasDuplicadas = servidor.replace ("\", "\\");

Mas eu recomendo fortemente usar um PreparedStatement, porque duplicar as barras resolve alguns problemas mas não outros. E se houver um apóstrofe (’), por exemplo, na sua string?

sf.marcius

como o colega disse, tenta usar PreparedStatement. algo como:

// abstraido... pegue uma conexao
        Connection con = getConection();
        try {
            PreparedStatement stm = con.prepareStatement("INSERT INTO tblpackage (id, nome, nome_package, servidor)VALUES(?, ?, ?, ?)");
            // o indice do PreparedStatement comeca no 1
            stm.setLong(1, pkg.getId());
            stm.setString(2, pkg.pkg.getNome());
            stm.setString(3, pkg.getNomePackage());
            stm.setString(4, pkg.getServidor());
            stm.executeUpdate();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
Criado 6 de janeiro de 2009
Ultima resposta 6 de jan. de 2009
Respostas 2
Participantes 3