Kan*_*ath 8 java jdbc batch-file
我对Java-JDBC API以及Oracle数据库有一点点独特的要求.我有autoCommit是默认值,这对Oracle来说是正确的,我使用类似于此链接的示例.
但是,当我添加说1000批时,让我们说每个都是插入.让我们假设大约有20条记录违反了某些约束条件,我希望剩下的980条记录对数据库进行COMMITTED(以后对任何其他连接的任何其他查询都可见)并忽略20条记录.在上面的示例中,当一行违反任何事务时,即使我在catch块中提交,事务也只会提交直到第一次失败.
我知道批量更新只有在你相当确定所有行都会通过并且异常处理不是一个时才会完成,但是我打算修补现有数据库所以某种"不良做法"没问题:)任何代码示例都会非常感谢.
****更多细节****
使用简单插入/更新是不行的,因为我处理接近3M行,所以每1000条记录批处理.简单地在循环中添加1000个插入(忽略异常)会占用更多时间(每1000个记录大约5秒),而批量更新<300ms.
问题:对于Oracle数据库,驱动程序似乎在第一次失败时停止,即当1000行被批处理并且第100次失败时,我希望它继续直到第1000行.我认为这不能在JDBC中完成(使用Oracle)就像链接表明只有少数数据库支持这样的功能,可能Oracle不是一个
我正在寻找一些解决方案,“对于 Oracle 数据库,驱动程序似乎在第一次失败时停止,即当批处理 1000 行并且第 100 行失败时,我希望它继续执行直到第 1000 行。” 基本上我想知道这是否可以使用 Oracle JDBC 驱动程序来完成。
然而,已经提出了多种答案(大多数/全部我已经考虑过)1)禁用约束/加载数据/删除违规行/重复多次2)在加载数据之前进行所有检查3)减少批次大小为 50 - 100。
不幸的是,我在加载之前无法进行检查,并且将批量大小设置为 50 或 100 意味着需要更多时间来完成我拥有的 5M 行(事实上,批量大小为 1000 时,总时间增加到几个小时,而不是 40 分钟)。我采取了将批量大小保持为 1000 的方法,按原样接受问题,并将代码放在“while”循环下并执行工作,直到填满所有行。
就像我说的,由于ORACLE BATCH JDBC在第一次失败后无法继续,所以这个问题的答案将是“不可行”,只需接受约束并记录该工具需要大约 40 分钟才能完成的事实:)