如何解决SQL语法错误?

时间:2012-04-10 10:23:06

标签: java mysql jdbc

try {
    String req = "INSERT INTO nouvelle_installation" +
      "values('" + ref + "','" + today + "','" + check + "','" + nbligne +
      "','" + tligne + "','" + categorie + "','" + instal + "','" + cin +
      "','" + user + "','" + prenom+"','" + numC + "','" + num + "','" + voie +
      "','" + tvoie + "','" + imm + "','" + app + "','" + etage +
      "','" + codep + "')"; 

    Statement m = s.getCon().createStatement();  
    m.executeUpdate(req);
} catch (SQLException e1) {
    e1.printStackTrace();
}
  

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:Erreur desyntaxeprès       de''aaa','2012-04-10','','------','---------------','----- - ”,       'NouvelleInstallati'àlaligne 1

5 个答案:

答案 0 :(得分:2)

正如其他人所说,使用prepared statements而不是连接你的陈述。

这会阻止SQL injection和您当前的问题:

"INSERT INTO nouvelle_installation" + "values" ...

结果

"INSERT INTO nouvelle_installationvalues" ...

您的表名与关键字values之间缺少空格。

答案 1 :(得分:2)

你需要在“INSERT INTO nouvelle_installation”+“values(......)之间加一个空格 或者字符串看起来像

"INSERT INTO nouvelle_installationvalues("...

所以看起来应该是这样的

"INSERT INTO nouvelle_installation" + " values(...

答案 2 :(得分:1)

正如已有人指出的那样,此代码受Sql注入攻击的影响 但是,查询中显示的第一个错误是values关键字

之前缺少的空格

答案 3 :(得分:1)

使用预准备语句而不是连接语句。

同样准备好的陈述比陈述更快。

您的表名与关键字values之间缺少空格。

答案 4 :(得分:0)

您在num后面有一个引用,在voie之前有一个引号,它们之间没有逗号。那是你想要的吗?

... + "','" + num  + "'"   +
      "'"   + voie + "','" + tvoie + ...

这实际上为您提供了,'NUM''VOIE','

values关键字之前也没有空格。