[英]Java MySQL executeUpdate syntax error
这是代码:
try{
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM mytable WHERE array=\"" + arrayName + "\"");
if(rs.next()){
String values = rs.getString("values");
if(values == null) values = "";
values += " " + added;
values = values.replaceAll("\\s+"," ");
stmt.executeUpdate("UPDATE mytable SET values = \"" + values + "\" WHERE array = \"" + arrayName + "\"");
return true;
}else{
System.out.println("Missing array '" + arrayName + "', returning false");
return false;
}
} catch(SQLException e) {
String error = "MySQL crash while adding to array " + arrayName + "\n";
error += e.getMessage();
System.out.println(error);
return false;
}
注意的参数:“ mytable”是数据库中表的名称,“ added”是我要添加到mytable的“ values”列中的字符串,“ arrayName”是已存储的字符串mytable的“数组”列中(仅有“数组”和“值”列)。 这是我得到的错误:
MySQL crash while adding to array anodematerialsoptions
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 'values = "item1 item2 item3 added" WHERE array = "arrayName"' at line 1
因此,“ stmt.executeQuery”工作正常,并且由于语法错误而导致“ stmt.executeUpdate”失败。 有人可以指出这里有什么问题吗?
values
是在几乎任何 SQL数据库中的保留字。 您必须逃脱它:
stmt.executeUpdate("UPDATE mytable SET `values` = \"" etc...
^------^---note the backticks
请注意,您容易受到sql注入攻击的攻击 。
您可以在mysql中使用带有别名的查询
更改
stmt.executeUpdate("UPDATE mytable SET values = \"" + values + "\" WHERE array = \"" + arrayName + "\"");
成
stmt.executeUpdate("UPDATE mytable t SET t.values = \"" + values + "\" WHERE t.array = \"" + arrayName + "\"");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.