Экранированная кавычка, так как значение поля вылетает в моем скрипте sql - PullRequest
0 голосов
/ 01 марта 2012

У меня есть следующий 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.

Может кто-нибудь сообщить мне, как решить эту проблемупроблема?

Ответы [ 3 ]

1 голос
/ 01 марта 2012

Я предполагаю, что ваш Java-код имеет строковый литерал, который выглядит следующим образом:

"INSERT INTO `status_need` VALU...ie d\'écol..."

?

Причина, по которой это не работает, заключается в том, что в Java внутристроковый литерал, \' означает '.Чтобы избежать обратной косой черты \, нужно написать \\ вместо:

"INSERT INTO `status_need` VALU...ie d\\'écol..."

(или, как говорит danihp, вы можете обойти проблему, написав '' вместо \': MySQL поддерживаетоба способа экранирования одинарных кавычек внутри строки в одинарных кавычках.)

1 голос
/ 01 марта 2012

Рекомендуемый подход - в основном использовать готовые заявления.Вы можете обратиться к ссылке ниже http://lists.mysql.com/java/5469

Также замена всех вхождений вручную может привести к странным результатамДля этого, пожалуйста, обратитесь к объяснению в блоге ниже.

http://www.bartbusschots.ie/blog/?p=141

1 голос
/ 01 марта 2012

Цитирование 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...