'' 'и' '' на Java .. Как с ними бороться? - PullRequest
0 голосов
/ 23 июля 2010

Я пишу это в JAVA:

stmt.executeQuery("SELECT * FROM mytable INTO OUTFILE '/tmp/mytable.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '\\' LINES TERMINATED BY '\n' ;");

Это должно быть записано между "", как показано, потому что это должна быть строка. Тем не менее, когда я запускаю код, он говорит: «Незакрытые строки и символы». Я знаю, но как не допустить, чтобы компилятор был сбит с толку "и", которые являются частью внутреннего оператора? Я хочу, чтобы компилятор считал их обычными строками, а не операциями Java.

Plz Help!

Ответы [ 6 ]

7 голосов
/ 23 июля 2010

Избегайте их с обратной косой чертой: " Hello \"world\"!"

Я не уверен, поможет ли это в данном конкретном случае, но попробуйте PreparedStatement: он часто позволяет вам не беспокоиться о цитировании аргументов,(Я не видел, чтобы он использовался для такого не-CRUD SQL, поэтому я не уверен, что это поможет).

4 голосов
/ 23 июля 2010

В Java строки обозначаются двойными кавычками, поэтому вам не нужно беспокоиться об одинарных кавычках в вашей строке.Однако вам нужно избегать двойных кавычек в запросе, экранируя их с помощью обратной косой черты \.

Это должно быть правильно: stmt.executeQuery("SELECT * FROM mytable INTO OUTFILE '/tmp/mytable.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' ESCAPED BY '\\\\' LINES TERMINATED BY '\\n' ;");

Редактировать: Вам также нужно было избежать существующих обратных косых чертв вашем запросе.Приведенная выше строка должна работать.

1 голос
/ 23 июля 2010

Посмотрите на последовательности побега:

http://download.oracle.com/docs/cd/E17409_01/javase/tutorial/java/data/characters.html

Ваша последняя строка будет выглядеть так:

"SELECT * FROM mytable INTO OUTFILE '/tmp/mytable.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' ESCAPED BY '\\' LINES TERMINATED BY '\n' ;"

Кроме того, понимает, что "\\" будет производить \, поэтому, если вы действительно хотите две косые черты, вам понадобится "\\\\", и если вы хотите, чтобы он распечатал \ n, вам нужно набрать " \\ n "и т. д.

0 голосов
/ 23 июля 2010

Вам нужно экранировать внутреннюю строку с помощью \:

"Bob said \"hello world\" to his friends learning Java."

Кроме того, обратные слеши в вашей строке тоже должны быть экранированы:

"This is a backslash: \\, so two backslashes would be \\\\"

Если сомневаетесь, добавьте еще обратную косую черту.

0 голосов
/ 23 июля 2010

Используйте \" символы для ввода " в строку.

0 голосов
/ 23 июля 2010

Вам также потребуется удвоить обратную косую черту, например, вам нужно написать \ n.

...