Java应用程序使用加载数据infile 查询将数据插入mysql。在csv文件中,一些错误的格式化值,如缺少行,不正确的字段(整数值的字符串值)。如果文件中存在不正确的记录(行),则java应用程序抛出异常,并且不添加任何记录,甚至是正确的行。如果使用heidi sql程序(sql客户端程序)对同一文件执行相同的查询,则添加所有记录,甚至是非正确的行(为缺少字段设置空值等)。我只想让我的java应用程序表现得像sql客户端,把所有行至少插入格式正确的行。
感谢。
SQL
load data infile '/a.txt' into table test_data fields terminated by ','
代码段
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);
}
}
}
答案 0 :(得分:0)
它不能丢弃错误的行,因为它们可能导致整个文件的解析失败。使用非常好的算法可以完成,但我认为不会有100%的准确性。
答案 1 :(得分:0)
忽略关键字是解决方案。
load data infile '/a.txt' **ignore** into table test_data fields terminated by ','
答案 2 :(得分:0)
忽略是正确的,但假设您需要知道已删除记录的详细信息..
冗长乏味的解决方案是在加载后转储文件,并使用diff say将PK值与infile的提取进行比较。
但是,这不会将关键违规与参照完整性违规区分开来。