mysql插入和更新查询中的单引号和双引号(java)

时间:2009-12-07 10:28:12

标签: java mysql escaping

ComName是'a'b'c'“def”j Limited。

我尝试在每个'和'之前添加\,但执行的结果查询是

"UPDATE empTable SET empId= '25', ComName = 'a'b'c'"def"j Limited  where ID=1"

我没有在''中看到我的Comname,并且在每个'和'

之前都没有出现

以下是构造列值

的代码
columnValue.replaceAll("\'", "\\" + "\'");
columnValue.replaceAll("\"", "\\" + "\"");
columnValue=("'" + columnValue + "'");

如何插入这些类型的字符串?

2 个答案:

答案 0 :(得分:8)

查看JDBC库中的PreparedStatements。 e.g。

PreparedStatement pstmt = con.prepareStatement("update Orders set pname = ? where Prod_Id = ?");
pstmt.setInt(2, 100);
pstmt.setString(1, "Bob");
pstmt.executeUpdate();

通过使用setString()等,它将使您不必引用字符串。关于如何使用它们的Here's a tutorial

编辑:正如尼克在下面强调的那样,这不仅可以节省引用问题,还可以节省SQL注入(安全)问题。

答案 1 :(得分:1)

作为快速解决方案,您可以尝试使用Apache commons lang StringEscapeUtils#escapeSql或等效库,例如this one