2016-01-24 4 views
0

так у меня есть файл CSV, и хотят импортировать его в MySQL, до сих пор в PHPMyAdmin я могу импортировать его с помощью следующей строки:импорт CSV в MySQL с Java

LOAD DATA INFILE 'C:\\Users\\Angel Silva\\Documents\\test.csv' INTO TABLE registros FIELDS ENCLOSED BY '"' TERMINATED BY ',' ESCAPED BY '"' LINES TERMINATED BY '\n' 

моей ява программы является:

public class recover { 
public static void main(String[] args){ 
    try { 
     String filename ="C:\\Users\\Angel Silva\\Documents\\test.csv"; 
     String query=null; 
     Class.forName("com.mysql.jdbc.Driver").newInstance(); 
     Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/gg", "root", ""); 
     Statement stmt = conn.createStatement(); 
     query = "LOAD DATA INFILE 'C:\\Users\\Angel Silva\\Documents\\test.csv' INTO TABLE registros FIELDS ENCLOSED BY '\"' TERMINATED BY ',' ESCAPED BY '\"' LINES TERMINATED BY '\\n'"; 
     stmt.executeQuery(query); 
     ResultSet rs = stmt.executeQuery(query); 
    } catch (ClassNotFoundException ex) { 
     Logger.getLogger(recover.class.getName()).log(Level.SEVERE, null, ex); 
    } catch (InstantiationException ex) { 
     Logger.getLogger(recover.class.getName()).log(Level.SEVERE, null, ex); 
    } catch (IllegalAccessException ex) { 
     Logger.getLogger(recover.class.getName()).log(Level.SEVERE, null, ex); 
    } catch (SQLException ex) { 
     Logger.getLogger(recover.class.getName()).log(Level.SEVERE, null, ex); 
    } 
} 

}

я получаю следующие ошибки:

ene 24, 2016 1:28:33 PM recover main 
SEVERE: null 
java.sql.SQLException: Row 1 was truncated; it contained more data tha there were input columns 
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:946) 
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2985) 
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1631) 
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723) 
at com.mysql.jdbc.Connection.execSQL(Connection.java:3277) 
at com.mysql.jdbc.Connection.execSQL(Connection.java:3206) 
at com.mysql.jdbc.Statement.executeQuery(Statement.java:1232) 
at recover.main(recover.java:29) 

как я уже сказал, если я ввел предложение из запроса непосредственно в phpymyadmin, я могу восстановить таблицу, но в java не работает

любая идея, что я делаю неправильно?

ответ

0
LINES TERMINATED BY '\\r\\n' 

(так как это Windows)

+0

Ivan Skalauh thx, но теперь только восстанавливает первую строку таблицы, как я могу восстановить всю таблицу? thx –

+0

Хмм, проблема по-прежнему связана с терминаторами линий. Попробуйте просто \ r или полностью удалите оператор LINES TERMINATED BY (MySQL может обнаружить его автоматически). –

0

так что, наконец, после прочтения MySQL документ я изменил код, как:

query="LOAD DATA INFILE 'C:\\\\Users\\\\Angel Silva\\\\Documents\\\\251.csv' INTO TABLE test FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\\r\\n' "; 
0

вы должны попробовать, добавляя имена столбцов таблицы в строку запроса

" LOAD DATA INFILE 'C:\\Users\\Angel Silva\\Documents\\251.csv' INTO TABLE test FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\\n' (col1,col2,col3) "; 

В моем случае это решило проблему ...