2016-05-17 25 views
0

我正在創建一個從FTP站點解析10 [fileNames/tableNames]數組並將其加載到MySQL中的類。我正在使用LOAD DATA INFILE下面是代碼塊。這一切都工作正常,當我嘗試添加ENCLOSED BY '"'當我將該參數添加到LOAD DATA INFILE聲明我無法弄清楚如何逃避Java中的單引號。我有幾個大文件的文本值用引號引起來,但沒有使用ENCLOSED BY '"'它們失敗。如何在Java中的MySQL語句中轉義引號

public int DatabaseEntry(String sql, String[]fileArray, int updFlag) { 
for(int i =0; i < fileArray.length; i++) 
    { 
    parseString = fileArray[i]; 
     String[] tokens = parseString.split("/"); 
     filetoEat = tokens[0]; 
     tableName = tokens[1];   

    final String sql1 = "LOAD DATA INFILE" + filetoEat + "INTO TABLE iber_stage." + tableName + "FIELDS TERMINATED BY',' LINES TERMINATED BY'\n' IGNORE 1 LINES"; 
    try { 
    Class.forName("com.mysql.jdbc.Driver"); 
    con = DriverManager.getConnection(url, username, password); 
    st = con.createStatement(); 
    rs = st.executeQuery(sql1); 

    if (rs.toString() != null) {//get first result 
     returnMsg = rs.toString(); 
     System.out.println(returnMsg); //Debug info  
     updFlag = 0; 
    } 

    } catch (SQLException ex) { 
     Logger lgr = Logger.getLogger(Create.class.getName()); 
     lgr.log(Level.SEVERE, ex.getMessage(), ex); 
     updFlag = 1; 

    } catch (ClassNotFoundException e) { 
     Logger lgr = Logger.getLogger(Create.class.getName()); 
     lgr.log(Level.SEVERE, e.getMessage(), e); 
     e.printStackTrace(); 
     updFlag = 1; 

我找的這個最後陳述

"LOAD DATA INFILE" + filetoEat + "INTO TABLE iber_stage." + tableName + "FIELDS TERMINATED BY',' ENCLOSED BY '"' LINES TERMINATED BY'\n' IGNORE 1 LINES"; 

就像我提到的,這工作得很好,速度快但是,如果有循環更好的方式,通過文件名和表名和創建數組一份準備好的聲明請告知。

感謝, 帕特

回答

1

而不是使用聲明,使用PreparedStatment。

看看這個文件:http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html

會逸出您的查詢。

逃脫單引號在封閉BY PARAM試試這個

String str = " ENCLOSED BY \"\" [REST OF THE STRING]" 
+0

我仍然不能創建LOAD DATA INFILE使用ENCLOSED BY「「」在一份聲明中使用的字符串。它不是語句失敗,當我添加ENCLOSED BY'「'時,由於無效字符常量而無法編譯。當我忽略了ENCLOSED BY'「'參數時,它可以正常運行,不管有沒有Prepared Statement。 – apesa

+0

我現在不能測試它,但是如果你想要一個帶雙引號的字符串,你應該這樣做:String str =」 ENCLOUSED BY \「\」[STRING的其餘部分]「 – dvtelles

+0

謝謝,這很有效。 – apesa

相關問題