2017-07-24 41 views
0

我正在尋找一種逃避字符串的方法來用Java查詢MySQL。在Java中退出MySQL字符串...沒有準備好的語句

但是,在你們中的一些人直接跳到「準備好的陳述」的結論之前,我想多解釋一下。

問題是,我沒有MySQL連接。我不直接從Java執行任何MySQL查詢。我不太瞭解準備好的聲明,但AFAIK準備好的聲明需要實時連接才能工作。

我想讓我的代碼讀取一堆CSV/XLS文件,獲取數據,然後爲MySQL生成一個巨大的INSERT查詢。但是現在這個查詢將被存儲在一個文本文件中。它不會執行,直到有人發出綠燈並將該文本文件轉儲到數據庫中。

有沒有一種簡單的方法來這樣做,而不使用矯枉過正的框架/庫?謝謝你們。

+0

這聽起來像一個奇怪的設置。如果你的代碼沒有直接訪問數據庫,爲什麼它應該創建SQL語句?更新XML並讓代碼訪問執行SQL的數據庫不夠嗎? –

+0

@TimothyTruckle嗯,我不是將查詢轉儲到數據庫中的人。要運行查詢的人可能會或可能不知道Java,她可能會或可能不知道有關編碼的知識。她可能只是簡單地複製查詢並在一些GUI SQL程序中運行查詢。或者......簡而言之,我的任務是從大量的CSV中提取所有數據,並將數據轉化爲一個巨大的INSERT查詢,Java僅僅是我選擇的自動化工具。你有更好的想法? – user2526586

+0

可能的[在Java中轉義SQL字符串]的副本(https://stackoverflow.com/questions/10522257/escaping-sql-strings-in-java) –

回答

0

好像沒有任何現有的lib /框架在那裏,做這樣的事情。所以我猜一個簡單的String機械手會做?

class xxx { 

    private String escapeStringForMySQL(String s) { 
     return s.replaceAll("\\", "\\\\") 
       .replaceAll("\b","\\b") 
       .replaceAll("\n","\\n") 
       .replaceAll("\r", "\\r") 
       .replaceAll("\t", "\\t") 
       .replaceAll("\\x1A", "\\Z") 
       .replaceAll("\\x00", "\\0") 
       .replaceAll("'", "\\'") 
       .replaceAll("\"", "\\\""); 
    } 

    private String escapeWildcardsForMySQL(String s) { 
     return escapeStringForMySQL(s) 
       .replaceAll("%", "\\%") 
       .replaceAll("_","\\_"); 
    } 

} 
1

您可以使用指定Special Character Escape Sequences爲MySQL

Escape Sequence Character Represented by Sequence 
\0 An ASCII NUL (X'00') character 
\' A single quote (') character 
\" A double quote (") character 
\b A backspace character 
\n A newline (linefeed) character 
\r A carriage return character 
\t A tab character 
\Z ASCII 26 (Control+Z); see note following the table 
\\ A backslash (\) character 
\% A % character; see note following the table 
\_ A _ character; see note following the table 
+0

非常感謝。似乎沒有任何現有的lib /框架可以做這樣的事情。我想我必須編寫自己的方法來替換這些字符。 – user2526586