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