2017-02-08 5 views
0

Ich versuche, Daten aus CSV-Datei zu laden, indemnicht gefunden (Fehlermeldung Errcode: 22 "Invalid argument")

try (Connection connection = DBConnection.getConnection()) { 
      String loadQuery = "LOAD DATA INFILE '" + path.toAbsolutePath() 
        + "' INTO TABLE persons FIELDS TERMINATED BY ','" 
        + " LINES TERMINATED BY '\n' (PersonID, FirstName, City) "; 
      System.out.println(loadQuery); 
      Statement stmt = connection.createStatement(); 
      stmt.execute(loadQuery); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

aber ich erhalte die folgenden Fehler

LOAD DATA INFILE 'D:\temp\fileupload.csv' INTO TABLE persons FIELDS TERMINATED BY ',' LINES TERMINATED BY ' 
' (PersonID, FirstName, City) 
java.sql.SQLException: File 'D:\ empfileupload.csv' not found (Errcode: 22 "Invalid argument") 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1072) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3563) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3495) 
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1959) 
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2113) 
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2687) 
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2616) 
    at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:782) 
    at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:625) 
    at com.coin.pay.controller.IndexController.readCsvUsingLoad(IndexController.java:203) 
    at com.coin.pay.controller.IndexController.uploadCSVtoDB(IndexController.java:175) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:497) 
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221) 
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136) 
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:114) 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827) 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738) 
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) 
    at  org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) 

org.apache. tomcat.util.threads.TaskThread $ WrappingRunnable.run (TaskThread.java:61) bei java.lang.Thread.run (Thread.java:745)

Wie soll ich das lösen? jede Hilfe wird geschätzt.

+0

Ist dies nicht * "' D: \ emp' "* dass das' \ t' im Pfad als Tab interpretiert wurde? Ist es nicht offensichtlich, zumindest zu testen, um es zu entkommen? Wie '\\ t'? – Tom

+0

Sie müssen das "\" in Ihrem String mit "\" umwandeln: '... INFILE 'D: \\ temp ...'. "\ t" ist ein Tabulatorzeichen. – IQV

Antwort

1

Ich denke, Sie sollten den umgekehrten Schrägstrich in \n in Ihrer LOAD DATA Aussage zu entkommen Java zu sagen, dass es sich um einen wörtlicher \n ist und kein echter Zeilenumbruch:

String loadQuery = "LOAD DATA INFILE '" + path.toAbsolutePath() 
       + "' INTO TABLE persons FIELDS TERMINATED BY ','" 
       + " LINES TERMINATED BY '\\n' (PersonID, FirstName, City) "; 

Wie andere gesagt haben, sollten Sie auch die entkommen Pfad zu Ihrer Datei.

Verwandte Themen