>

Fórum

Fórum da RL System, voltado para analistas, programadores etc. Tudo sobre linguagem de programação e desenvolvimento Full Stack: Banco de Dados, Android, C#, Java, .NET, PHP, Node, Javascript, TypeScript, Front, HTML e muito mais.



Problema no banco de dados: 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 '(?, ?)' at line 1


Bom Dia!

Estou fazendo o curso de java EE, na video aula 6 é ensinado duas formas de enviar comandos sql a partir da minha servlet. No caso este:


try {
Class.forName("com.mysql.jdbc.Driver");

String SQL = "INSERT INTO chamados (titulo, conteudo) VALUES (";
SQL += " '"+ titulo +"', '"+ conteudo +"') ";


try {

Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/chamados_rlsystem", "root",
"123123");

Statement stm = conn.prepareStatement(SQL);

stm.execute(SQL);
stm.close();

conn.close();

} catch (SQLException e) {
out.println("Problema no banco de dados: " + e.getMessage());
}


E o outro que é muito mais organizado:


try {
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/chamados_rlsystem", "root", "");

PreparedStatement pstm = conn.prepareStatement(SQL);

pstm.setString(1, titulo);
pstm.setString(2, conteudo);


pstm.execute();

pstm.close();

conn.close();

} catch (SQLException e) {
out.println("Problema no banco de dados: " + e.getMessage());
}


O problema é que no segundo método eu recebo o seguinte erro:
Problema no banco de dados: 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 '(?, ?)' at line 1 Como se na runtime o "?" não tivesse sido substituído pelo titulo e o conteúdo. Tentei tentei e acabei regressando ao primeiro método e só então resolvi entrar no fórum da RLSystem. De qualquer forma alguém pode me explicar o motivo do segundo método não ter funcionado? A versão do meu MySQL não suporta esse método? Sou usuário do ubuntu 14.10



2 Respostas


Ola Filipe

tente usar fazer assim

Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/chamados_rlsystem", "root", "");

String sql = "INSERT INTO chamados (titulo, conteudo) VALUES (?,?);

PreparedStatement pstm = conn.prepareStatement(SQL);

pstm.setString(1, titulo);
pstm.setString(2, conteudo);

pstm.execute();

pstm.close();

conn.close();

} catch (SQLException e) {
out.println("Problema no banco de dados: " e.getMessage());
}




Muito obrigado, deu certo. Ao que parece a String sql estava isolada em um escopo diferente.