java加载数据填充查询丢弃错误行

java加载数据填充查询丢弃错误行,java,mysql,load-data-infile,Java,Mysql,Load Data Infile,Java应用程序使用加载数据填充查询将数据插入mysql。在csv文件中,一些格式错误的值,如缺少行、不正确的字段(整数值的字符串值)。若文件中有不正确的记录(行),java应用程序将抛出异常,并且不添加任何记录(即使是正确的行)。如果使用heidi sql程序(sql客户端程序)对同一文件执行相同的查询,则添加所有记录,甚至不正确的行(为缺少的字段等输入空值)。我只想让我的java应用程序表现得像sql客户机一样,放置所有行,至少插入格式正确的行 谢谢 sql 代码片段 public void

Java应用程序使用加载数据填充查询将数据插入mysql。在csv文件中,一些格式错误的值,如缺少行、不正确的字段(整数值的字符串值)。若文件中有不正确的记录(行),java应用程序将抛出异常,并且不添加任何记录(即使是正确的行)。如果使用heidi sql程序(sql客户端程序)对同一文件执行相同的查询,则添加所有记录,甚至不正确的行(为缺少的字段等输入空值)。我只想让我的java应用程序表现得像sql客户机一样,放置所有行,至少插入格式正确的行

谢谢

sql

代码片段

public void query(String query, Connection conn) throws SQLException {

        PreparedStatement ps = null;
        try {
            ps = conn.prepareStatement(query);
            ps.executeUpdate();
        } catch (MySQLTransactionRollbackException e) {
            logger.error("", e);
            throw new MySQLTransactionRollbackException();
        } catch (SQLException e) {
            logger.error("", e);
            throw new SQLException(e);
        } finally {

            if (ps != null) {
                try {
                    ps.close();
                } catch (Exception e) {
                    logger.error("", e);
                }
            }

            try {
                conn.close();
            } catch (SQLException e) {
                logger.error("", e);
            }

        }
    }

它不能丢弃错误的行,因为它们可能会导致整个文件的解析失败。使用非常好的算法可以做到这一点,但我认为不会有100%的准确性。

忽略关键字是解决方案

load data infile '/a.txt'  **ignore** into table test_data fields terminated by ','

ignore是正确的,但是假设您需要知道删除记录的详细信息

一个冗长而乏味的解决方案是在加载后转储一个文件,并使用diff-say将PK值与infle的摘录进行比较

但这并不能区分键冲突和引用完整性冲突

load data infile '/a.txt'  **ignore** into table test_data fields terminated by ','