我想使用 Java 在 Sql 中存储一个包含 '\n' 的字符串。但问题出在数据库中,而不是 \na 新行正在被存储。
例如,字符串是“abcd\nefgh”,那么它被存储为的数据库
abcd
efgh
当我使用 php 存储这些东西时,我遇到了同样的问题,我克服了使用 mysqli_escape_real_string()
我怎样才能在java中克服这个问题?请帮忙。
但问题出在数据库中,而不是 \na 新行正在被存储。
好吧,听起来字符串本身可能包含换行符。如果你写:
String x = "a\nb";
在 Java 中,这是一个包含 3 个字符的字符串:
这应该在数据库中存储为 3 个字符的字符串。当你取回它时,你会忠实地得到一个由 3 个字符组成的字符串。数据库将简单地存储你给它的东西。
现在,如果您说您正在尝试存储一个实际上包含反斜杠后跟一个 的字符串,并且该字符串n
正在某处转换为换行符,那么您需要发布一些代码来显示您在做什么. 例如,我可以想象如果您将值直接包含在 SQL 语句中,而不是使用参数化 SQL ,可能会发生这种情况。(始终使用参数化 SQL。)
所以基本上,要么它实际上根本不是问题,要么你应该发布一些代码。
编辑:现在我们已经看到了:
当我使用 php 存储这些东西时,我遇到了同样的问题,我克服了使用 mysqli_escape_real_string()
听起来您可能只是面临在 SQL 语句中不恰当地包含值的问题。如果您正在使用类似的东西:
String sql = "INSERT INTO TABLE FOO VALUES ('" + text + "')";
Statement statement = connection.createStatement();
statement.executeUpdate(sql);
那么你需要停止这样做。你应该使用:
String sql = "INSERT INTO TABLE FOO VALUES (?)";
PreparedStatement statement = connection.prepareStatement(sql);
statement.setString(1, text);
statement.execute();
(使用适当的代码来关闭语句和连接,例如 Java 7 中的 try-with-resources 语句。)
\n 是换行符。如果你想将这样的组合存储为文本,你必须转义\
,所以我想你必须为目标字符串中\\n
的每一次出现存储。\n
但是,转义字符可能对 DBMS 很不利。
如果您不使用参数化查询而是进行原始插入(我不建议这样做),也许您必须双重转义反斜杠,因为它也是 mysql 中的关键字。
String query = "INSERT INTO TABLE VALUES ('Hello\\\\nWorld')";