如果一条记录在 oracle 中插入失败,则避免 jdbc 批量插入失败
Posted
技术标签:
【中文标题】如果一条记录在 oracle 中插入失败,则避免 jdbc 批量插入失败【英文标题】:avoid jdbc batch insert failure if one record failed to insert in oracle 【发布时间】:2018-09-26 10:17:09 【问题描述】:如果在批处理过程中发生错误,Oracle JDBC 驱动程序将引发 BatchUpdateException。使用 NamedParameterJdbcDaoSupport 插入数据如下
getJdbcTemplate().batchUpdate(query, dataList, 1000,
new ParameterizedPreparedStatementSetter<MyObject>()
@Override
public void setValues(final PreparedStatement ps, final MyObject bucket) throws SQLException
ps.setString(1, bucket.getInit());
ps.setString(2, bucket.getNbr());
);
由于唯一键约束,我遇到了 BatchUpdateException,我们正在处理数百万条记录,因此我们无法去数据库检查唯一键。
如果一条记录失败,无论如何批量插入不会失败。
【问题讨论】:
有没有什么方法可以在将数据发送到 Oracle 之前对其进行清理,这样这样的故障就不太可能发生? 当我们处理数百万条记录时,我们不知道哪条记录是重复的。如果是空指针或类似的异常,我们只能在代码中处理 那我没有答案。也许使用较小的批次,这样如果一个批次失败,您不必回滚所有内容。 是的,我会接受你的建议..尝试从批处理中删除失败的记录并重新插入。 【参考方案1】:您想使用IGNORE_ROW_ON_DUPKEY_INDEX 提示。 在插入后添加注释,如下所示。
insert /*+ IGNORE_ROW_ON_DUPKEY_INDEX(table_name, unique_index_name) */
(...)
但如果您以这种方式插入一百万行,则最好使用 sqlldr。
【讨论】:
以上是关于如果一条记录在 oracle 中插入失败,则避免 jdbc 批量插入失败的主要内容,如果未能解决你的问题,请参考以下文章
oracle中plsql练习题----查询姓为“SMITH”的员工信息,并输出其员工号姓名工资部门号。 – –如果该员工不存在,则插入一条新记录,员工号为2012,员工姓名为“Smith”,工(代码