0

我正在尝试将文本更新到 MySql 数据库中。文本中包含 " 标记。例如,当我编写插入命令时,示例字符串现在可能是 Hello "world",其总和如下

插入 mytable ('mystring') values("Hello "world"");

我正在使用java来执行这样的命令。显然,由于世界字符串中的双引号,这会产生错误。我尝试用java替换它 givenString.replaceAll("\"", "\\""); givenString.replace(Pattern.quote("\""), "\\"");

但没有任何效果。任何帮助是极大的赞赏 !

4

2 回答 2

5

\像这样双重逃脱:

givenString.replaceAll("\"", "\\\"");

正如 Ted Hopp 在评论中所说,要将数据插入表中,您应该使用参数用户准备好的语句,并根据您使用的 API 设置它们。例如,如果您使用 JDBC,则可以使用对象的setString方法Statement

String str = "Hello \"world";
PreparedStatement stmt = con.prepareStatement(
      "insert into mytable('column') values(?)");
stmt.setString(1, str);

关于您的第一条评论:

在 Java 中,字符串是不可变的,因此replaceAll返回一个新实例,其内容是具有所需替换的字符串。所以你想要的是将结果再次分配给前一个变量,如下所示:

public String getSqlLikeString(String givenString) {
   System.out.println(givenString); 
   givenString = givenString.replaceAll("\"", "\\\""); 
   System.out.println(givenString); 
   return givenString;
}

// or just
public String getSqlLikeString(String givenString) {
   return givenString.replaceAll("\"", "\\\"");
}
于 2012-10-18T18:20:20.017 回答
0

尝试这样的事情:

    String s = "hello \"world\"";
    System.out.println(s);
    System.out.println(s.replace("\"", "\\\""));
于 2012-10-18T18:21:11.280 回答