DataSource ds = null; Context initctx=new InitialContext(); ds=(DataSource)initctx.lookup("java:OracleDS"); if(ds!=null){ Connection conn=ds.getConnection(); Statement st = null; conn.setAutoCommit(false); st=conn.createStatement(); int i=20; try{ while(i>0){ st.executeUpdate("update WS_TEMPLATE set top=0 where dataitem_id=4 and style_id=1"); i--; } }catch(Exception ex){ try{ conn.rollback(); }catch(Exception ex1){} }finally{ st.close(); conn.close(); } }
如果把update语句换成update WS_TEMPLATE set top=0 where dataitem_id=4就可以通过,请问是怎么回事?1: 同样的语句执行20次不知道是干什么? 2: 你这个如果产生死锁的话,可能是和其它地方冲突,本身应该不会有问题,另外一个地方可能也在更新WS_TEMPLATE表,因为你这个地方连续更新20次,如果在这20次中间有其它地方对这个记录进行更新就可能会产生死锁。 style_id是外键吧?如果是的话,给style_id加index应该可以解决。