当前位置: 首页 > 知识库问答 >
问题:

如果在oracle中插入一条记录失败,避免jdbc批处理插入失败

韩楷
2023-03-14

如果在批处理过程中发生错误,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,我们正在处理数百万条记录,因此我们无法进入数据库检查唯一密钥。

如果一条记录失败,那么批插入不会失败。

共有1个答案

柳俊逸
2023-03-14

你想使用IGNORE_ROW_ON_DUPKEY_INDEX提示。在插入后添加注释,像这样。

insert /*+ IGNORE_ROW_ON_DUPKEY_INDEX(table_name, unique_index_name) */
       (...)

但是如果您以这种方式插入一百万行,那么使用sqlldr可能会更好。

 类似资料:
  • 所以我只使用Jooq来构建查询,而不是执行查询,如下所示: 对象可以执行查询conn.asyncExecute(org.jooq.query query)。所以我的问题是,如何创建类型为org.jooq的批插入查询。查询?具体来说,给定一个列表 请注意,我知道其他问题询问如何使用Jooq进行批处理插入,但他们使用Jooq执行查询就像下面Jose Martinez的回答一样,而这里我只使用Jooq构

  • 问题内容: 我需要将几亿条记录插入mysql db。我要一次插入一百万个。请在下面查看我的代码。它似乎很慢。有什么方法可以优化它吗? 问题答案: 我在mysql中遇到类似的性能问题,并通过在连接URL中设置useServerPrepStmts和rewriteBatchedStatements属性来解决。

  • 我需要使用JDBC在Oracle数据库中进行大量插入,即两位数百万。为此,我使用了类似于以下类的东西,灵感来自使用JDBC进行批处理插入的高效方法: 虽然这种插入方式很好,但速度非常慢。JDBC batch insert performance描述了MySQL基本上可以解决这个问题,因为在Oracle上似乎不存在,但在这里没有太大帮助。 为了提高性能,我还尝试将语句切换为一个大的

  • 问题内容: 我正在尝试从包含日期列的.xlsx电子表格中导入数据。在这些列中,日期以DD-MON-YY格式显示(例如:20-AUG-12)。 运行导入向导时,一切正常,直到必须精确调整列/字段映射。我有一个免责声明,说所选格式与表字段定义不匹配(我的字段是日期字段)。插入脚本的示例: 当我尝试运行此查询时,出现以下错误: ORA-01843:无效月份01843。00000-“无效月份” 如您所见,

  • 我试图从包含日期列的.xlsx电子表格中导入数据。在这些列中,日期以DD-MON-YY格式显示(例如:20-aug-12)。 编辑:我的约会语言匹配器设置为“法语”。我可以改成“美国”吗?

  • 我目前正在尝试在Quarkus 1.13中注入和读出HttpRequest,但是没有任何成功。我使用RESTEasy-Reactive作为我的endpoint。 这就是我目前包含它的方式。 构建过程成功,但是当我试图访问像< code > http request . absolute uri()这样的属性时,我得到了一个NPE 我还尝试了其他类,如或,但仍然没有成功。用注入它甚至没有构建。我缺少