这是我的查询
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')'
答案 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/