проблема в том, где предложение MySQL запрос - PullRequest
1 голос
/ 12 мая 2011

Привет! Я генерирую messahedigest с SHA1 файла (с расширением .eml, так как он содержит информацию электронной почты), а затем сохраняю его в таблице с именем web_de в столбце messagedigest.Почему я не могу выполнить следующий запрос в MySQL?а также не в Java ...

SELECT slno FROM `webcrawler`.`web_de` 
where messagedigest='?Ê'?`®o1F±[øT¤?¿!€' ;

, в то время как я мог выполнить запрос, как

SELECT slno FROM `webcrawler`.`web_de` 
where messagedigest= ')@Ä€ó…ªã³§°óÚdv~θ`';

Pl, обратите внимание, что я пытаюсь выполнить этот запрос в MySQL Workbench 5.2.32 и используюmysql 5.1

Может кто-нибудь помочь мне здесь, пожалуйста ???

Заранее спасибо

Ответы [ 3 ]

3 голосов
/ 12 мая 2011

Вы должны экранировать эту одинарную кавычку в первом запросе:

where messagedigest = '?Ê''?`®o1F±[øT¤?¿!€' ;

Выход осуществляется путем дублирования кавычек:

''

(кстати, как вы видите, даже подсветчик синтаксиса stackoverflow не смог правильно отформатировать вашу строку ...)

С другой стороны, вы не должны вставлять значения в SQL по разным причинам (безопасность, производительность). Поскольку вы используете Java, используйте PreparedStatement вместо:

// Prepare a statement with a bind variable : ?
PreparedStatement ps = connection.prepareStatement(
    "SELECT slno FROM webcrawler.web_de WHERE messagedigest = ?");

// Bind your string to the first bind variable
ps.setString(1, "?Ê'?`®o1F±[øT¤?¿!€");

// ...
ResultSet rs = ps.executeQuery();
0 голосов
/ 12 мая 2011

значение в сообщении содержит цитату.Если вы уклонитесь от кавычек, это должно сработать, но ... вам лучше кодировать дайджест сообщения, прежде чем пытаться записать его в базу данных.

0 голосов
/ 12 мая 2011

' не сбежал. Замените его двойными кавычками '', чтобы оно читалось как:

SELECT slno FROM `webcrawler`.`web_de`  
where messagedigest='?Ê''?`®o1F±[øT¤?¿!€'; 

РЕДАКТИРОВАТЬ: слишком медленно! : P

Вы также можете избежать этого, используя \' также

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