我有以下dml sql(由mysql wb生成):
INSERT INTO `status_need` VALUES (1,1,1,'famille cherchant une autre famille (pour garde partagée ou sortie d\'école)'),(2,1,2,'famille cherchant professionnelle de la garde d\'enfants'),(3,2,1,'professionnelle de la garde d\'enfants cherchant enfants à garder');
当我从java运行它时,它可能会因为字段值中的撇号/引号而引发错误。
我不确定为什么这是因为引号被反斜杠转义,而且这个SQL是由mysql本身生成的。
有谁能告诉我如何解决这个问题?
答案 0 :(得分:1)
引用mysql文档:
There are several ways to include quote characters within a string:
A “'” inside a string quoted with “'” may be written as “''”.
A “"” inside a string quoted with “"” may be written as “""”.
Precede the quote character by an escape character (“\”).
A “'” inside a string quoted with “"” needs no special treatment and need not be doubled or escaped. In the same way, “"” inside a string quoted with “'” needs no special treatment.
但是正确的答案是你应该寻找java为你做这个的方式。有些想法就像real_escape php一样。请参阅:http://docs.oracle.com/javase/1.4.2/docs/api/java/sql/PreparedStatement.html
答案 1 :(得分:1)
我猜你的Java代码有一个字符串文字,如下所示:
"INSERT INTO `status_need` VALU...ie d\'écol..."
不起作用的原因是在Java中,在字符串文字中,\'
表示'
。您需要通过编写\
来转义反斜杠\\
:
"INSERT INTO `status_need` VALU...ie d\\'écol..."
(或者,正如danihp所说,你可以通过编写''
而不是\'
来回避这个问题:MySQL支持在单引号字符串中转义单引号的两种方式。)
答案 2 :(得分:1)
推荐的方法主要是使用预备语句。您可以参考以下链接 http://lists.mysql.com/java/5469
同时手动替换所有实例可能会产生奇怪的结果。为此,请参阅下面的博客说明。