导航

问题描述:
这个sql放到plsql里可以正常执行,但是放到程序里执行的时候,我单步调试执行的时候,运行stmt.executeUpdate();这句的时候,就会抛出主键冲突的异常.奇怪的是,我如果直接运行程序,就可以正常执行。不会抛出任何异常
sql = "insert into B(Country_ID,CREATE_DATE,DATA_TIMES,COUNTRY_NAME, DATA_DATE) 
Select t.country_id,t.create_time,'"+ Data_Times+ "', t.country_name,'"+ Data_Date+ "' from f_country t";
log.info("执行sql-- " + sql + " ---");
stmt = conntect.prepareStatement(sql);
stmt.executeUpdate();

解决:

我在调试的时候watch了一个expression是stmt.executeUpdate()。所以每次单步调试到stmt = conntect.prepareStatement(sql);这句的时候,eclipse就运行stmt.executeUpdate()并返回表里受影响的行数.这个时候我继续单步执行下一句,也就是stmt.executeUpdate()。那么肯定会提示主键冲突。因为执行了两遍stmt.executeUpdate()语句。

这就是为啥我单步调试抛主键冲突异常,而直接运行的时候不抛的原因。。
这种问题真是晕死了。