2010-07-23 64 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' ;"); 

這是有間寫有’」的節目,因爲它具有是一個字符串,但是當我運行這段代碼時,它會顯示「未封閉的字符串和字符支線」,但我知道,但是如何不讓編譯器被內部陳述中的「和」混淆?我希望編譯器將它們視爲普通的Strings而不是Java操作。

Plz Help!

回答

7

用反斜槓轉義:" Hello \"world\"!"

我不知道它是否會在這種特殊情況下有所幫助,但嘗試一個PreparedStatement,它往往可以讓你不必擔心參數報價。 (我沒有看到它用於這種非CRUD SQL,所以我不知道它會有幫助)。

+2

我認爲還有一個問題, '\\''和possi bly''\ n''。應該是「\\\\\」和「\\ n''。 – 2010-07-23 13:59:45

+0

準備好的語句的+1 - 我也推薦使用綁定變量 - 較少的問題與潛在的安全漏洞的方式。 – aperkins 2010-07-23 14:05:05

0

您還需要加倍反斜槓f.e,您需要寫\ 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' ;");

編輯:您還需要逃避現有的反斜槓在查詢中。上面的行應該工作。

相關問題