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

Posted

技术标签:

【中文标题】如何将包含双引号的字符串添加到 sql 数据库?【英文标题】:How to add a string containg a double quote to a sql database? 【发布时间】:2014-09-02 02:20:12 【问题描述】:

我想使用 JDBC 向我的 sql 数据库中添加一个字符串。但问题是,只要字符串包含双引号,sql 命令的解释就会完全不同,并且会抛出“您的 SQL 语法有错误;请检查与您的 mysql 服务器版本相对应的手册以获取正确的语法” 。”

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

如果 string = "abc",则 sql = INSERT INTO tableName VALUES ("abc") 但是如果 string = "ab\"cd",那么 sql = INSERT INTO tableName VALUES ("ab"c") 因此对于包含双引号的字符串,sql 命令的解释完全不同。

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

附言。我不能将双引号更改为单引号。并且可以有其他技巧来添加这样的字符串,但我想知道是否真的没有直接添加这样的字符串的方法。

【问题讨论】:

MySQL quotes, double quotes mess的可能重复 【参考方案1】:

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

当你使用引号来分隔字符串时:

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

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

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

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

【讨论】:

【参考方案2】:

您遇到了良性 SQL 注入。幸运的是string 不是Little Bobby Tables。

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

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


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

【讨论】:

【参考方案3】:

根据MySQL Spec,它将\" 识别为转义双引号。你也可以使用两个双引号 "" 来转义双引号 " 字符

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

【讨论】:

【参考方案4】:

改一下

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"

【讨论】:

【参考方案5】:

我尝试通过转义双引号来添加字符串,但这不起作用。我可以添加字符串的唯一方法是使用 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();

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

【讨论】:

以上是关于如何将包含双引号的字符串添加到 sql 数据库?的主要内容,如果未能解决你的问题,请参考以下文章

带双引号的 PHP/SQL 准备语句

sql语句中双引号添加的问题

CSV 解析包含双引号和逗号的字符串

在 MySql 中,如何将 csv 文件中的 sql 字符串中的空值导出为双引号(“”)?

如何在vba中的字符串中添加双引号?

Java 字符串添加双引号