你的sql语法有错误

时间:2015-09-02 19:05:31

标签: mysql jdbc

这是我的查询

result = s.executeUpdate("INSERT INTO order " + "VALUES ('" + id.getText() + "','" + name.getText() + "', '" + code.getText() + "','" + price.getText() + "')");

我得到了这个例外:

  

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:你有一个   SQL语法错误;查看与您的手册相对应的手册   MySQL服务器版本,用于在'order VALUES附近使用正确的语法   第(1)行(('1'),('1'),('1'),('1')'

3 个答案:

答案 0 :(得分:3)

订单是一个保留字 - 我不会将它用作表名,但是如果你坚持使用它,只需在它周围放回蜱。 INSERT INTO `order` ...

答案 1 :(得分:1)

您需要使用[{3}},

的反引号
result = s.executeUpdate("INSERT INTO `order` " + "VALUES ('" + id.getText() + "','" + name.getText() + "', '" + code.getText() + "','" + price.getText() + "')");

此外,您的代码很容易注入SQL。所以你也需要努力。我的建议是使用 reserved keywords 来避免SQL注入。

同样好的阅读:prepared statement

答案 2 :(得分:0)

确保没有任何getter发送可能导致查询在语法上不正确的字符。 如果你的getter返回一个保留字符,如下所示:

reserved = gen-delims / sub-delims

gen-delims =“:”/“/”/“?” /“#”/“[”/“]”/“@”

sub-delims =“!” /“$”/“&” /“'”/“(”/“)”/“*”/“+”/“,”/“;” /“=”

*然后声明将无法按预期运行。 这就是为什么输入的卫生对任何陈述都很重要的原因。

详细了解查询字符串中允许的未编码: http://www.456bereastreet.com/archive/201008/what_characters_are_allowed_unencoded_in_query_strings/