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";
就像我提到的,這工作得很好,速度快但是,如果有循環更好的方式,通過文件名和表名和創建數組一份準備好的聲明請告知。
感謝, 帕特
我仍然不能創建LOAD DATA INFILE使用ENCLOSED BY「「」在一份聲明中使用的字符串。它不是語句失敗,當我添加ENCLOSED BY'「'時,由於無效字符常量而無法編譯。當我忽略了ENCLOSED BY'「'參數時,它可以正常運行,不管有沒有Prepared Statement。 – apesa
我現在不能測試它,但是如果你想要一個帶雙引號的字符串,你應該這樣做:String str =」 ENCLOUSED BY \「\」[STRING的其餘部分]「 – dvtelles
謝謝,這很有效。 – apesa