【问题标题】:import csv to mysql with java使用java将csv导入mysql
【发布时间】:2016-01-24 19:33:29
【问题描述】:

所以我有一个 csv 文件,并且想将其导入 mysql,到目前为止,在 phpmyadmin 中我可以使用以下行导入它:

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

我的java程序是:

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 中不起作用

知道我做错了什么吗?

【问题讨论】:

    标签: java csv recover


    【解决方案1】:
    LINES TERMINATED BY '\\r\\n'
    

    (因为它是 Windows)

    【讨论】:

    • Ivan Skalauh thx,但现在只恢复表的第一行,我怎样才能恢复整个表?谢谢
    • 嗯,问题仍然在于行终止符。试试 \r,或者完全删除 LINES TERMINATED BY 语句(MySQL 可能能够自动检测到它)。
    【解决方案2】:

    所以最后在阅读了 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' ";
    

    【讨论】:

      【解决方案3】:

      您必须尝试将表列名称附加到查询字符串

      " 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) ";
      

      就我而言,它解决了问题...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-05-11
        • 1970-01-01
        • 2018-02-16
        • 1970-01-01
        • 1970-01-01
        • 2011-03-02
        • 1970-01-01
        相关资源
        最近更新 更多