如何将包含双引号的字符串添加到sql数据库?

时间:2014-07-11 12:42:36

标签: mysql sql database jdbc

我想使用JDBC在我的sql数据库中添加一个字符串。但问题是,只要字符串包含双引号,那么sql命令的解释完全不同,并且#34;您的SQL语法中有错误;检查与MySQL服务器版本对应的手册,以获得正确的语法"被抛出。"

例如, String ssql =" INSERT INTO tableName VALUES(\"" + string +" \")&#34 ;;

如果string =" abc",则sql = INSERT INTO tableName VALUES(" abc")
但是如果string =" ab \" cd&#34 ;,那么sql = INSERT INTO tableName VALUES(" ab" c")


因此,对于包含双引号的字符串,sql命令的解释完全不同。

如何将这样的字符串添加到数据库中。

PS。我不能将双引号更改为单引号。还有其他黑客可以添加这样的字符串,但我想知道是否真的没有这种方法直接添加这样的字符串。

5 个答案:

答案 0 :(得分:3)

您需要转义字符串值以在查询中生成字符串文字。

使用引号分隔字符串时:

  • 字符串中的反斜杠(\)应替换为两个反斜杠。

  • 字符串中的引号(")应替换为反斜杠和引号。

如果您使用撇号(')来分隔字符串(这在SQL中更常见),您将转义撇号而不是引号。

如果可能,您应该使用参数化查询,而不是将值连接到查询中。

答案 1 :(得分:1)

您正在体验良性SQL注入。幸运string不是Little Bobby Tables

相反,您应该使用INSERT INTO tableName VALUES (?)之类的参数化查询,并通过参数发送string的值。

有关更多详细信息,请参阅http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html

上的JDBC文档

现在,回答这个问题:假设字符串不是来自用户来源,而是您自己尝试编写查询,则可以在连接之前将"替换为字符串中的\"

答案 2 :(得分:0)

MySQL Spec它将\"重新标记为双引号。你也可以使用两个双引号""来逃避双引号"字符

  

\“双引号(”“”)字符

答案 3 :(得分:0)

更改此

String ssql = "INSERT INTO tableName VALUES (\""+ string + "\")";

String ssql = "INSERT INTO tableName VALUES ('"+ string + "')";

或者使用像这样的PreparedStatement简化它

String ssql = "INSERT INTO tableName VALUES (?)";
preparedStatement.setString(1,"string");

如果要插入双引号,则需要将它们转义为类似

的内容
String ssql = "INSERT INTO tableName VALUES (?)";
preparedStatement.setString(1,"\"string\"");

这将在表格中插入"string"

答案 4 :(得分:-1)

我尝试通过转义双引号来添加字符串,但这并不起作用。我可以添加字符串的唯一方法是使用PreparedStatement而不是Statement类。

String string = "abc\"abc";
String sql = "INSERT INTO tableName VALUES(?)";

connection = DriverManager.getConnection(DB_URL, USER, PASS);
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, string);
preparedStatement.executeUpdate();

此代码段成功将包含双引号的字符串添加到数据库中。