2010-07-23 3 views
0

Я пишу это в JAVA:"" и «" в Java .. Как с ними бороться

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

Это должно быть написано между "», как шоу, потому что он должен String, но когда я запускаю код, он говорит «Unclosed String and Character laterals». Я знаю, но как не путать компилятор с «и», которые являются частью внутреннего оператора? Я хочу, чтобы компилятор рассматривал их как обычные строки, а не операции Java.

Plz Help!

ответ

7

избежать их с помощью обратной косой черты: " Hello \"world\"!"

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

+2

Я думаю, что есть проблема с двойным отказом ' '\\' 'и possi bly '' \ n''. Вероятно, должны быть '' \\\\ ''и' '\\ n''. –

+0

+1 для подготовленного оператора - я бы также рекомендовал использовать переменные связывания - тем меньше проблем с потенциальными дырами в безопасности. – aperkins

0

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

0

Используйте \" символов, которые необходимо положить " в строку.

0

Вам нужно бежать внутри строки с \:

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

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

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

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

4

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

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

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

1

Посмотрите на экранирующие последовательности:

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» и т. д.

Смежные вопросы