我用java读取xml文件,要向3个表里面插入数据,所以要调用3个存储过程, 但只执行一次commit,第2个表的主键是第3个表的外键, 第2个表的纪录被删除 第3个表引用的纪录是要被级联删除的现在的问题就是 我只在xml里写入一条记录(包含了3个表里面的数据) 每次运行这个java文件 有时候数据能插入进3个表 ,有时不能 , 不能的时候抛出的异常是,第3个表找不到外键引用,看起来像是第3个表正在insert, 但是被引用的第2个表却没有记录。实在不知道怎么解决了。

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【wodi1015】截止到2008-07-23 11:42:07的历史汇总数据(不包括此帖):
    发帖的总数量:57                       发帖的总分数:2290                     每贴平均分数:40                       
    回帖的总数量:50                       得分贴总数量:3                        回帖的得分率:6%                       
    结贴的总数量:57                       结贴的总分数:2290                     
    无满意结贴数:9                        无满意结贴分:370                      
    未结的帖子数:0                        未结的总分数:0                        
    结贴的百分比:100.00%               结分的百分比:100.00%                  
    无满意结贴率:15.79 %               无满意结分率:16.16 %                  
    敬礼!
      

  2.   

    你为什么要使用存储过程啊?这么简单的情况最好不要使用存储过程来做。直接在java程序里面做,完事大吉
      

  3.   

    我对存储过程和事务,不太了解.不明白事务和存储过程有什么联系.但是,印象中,觉得,一个存储过程,里面应该封装一个事务.也就是说,像楼主这样的情况,应该将3个存储过程的内容做成1个存储过程,这样,在这个过程中如果出错,可以将事务回滚.那么,3个存储过程应该按3个事务来提交的.这样,在第2个事务没有完成的情况下再提交第3个事务就有可能抛出异常了.因为,很多数据库,事务都是并发处理的.你提交的时候可能是分先后的,但是,未必先提交的事务,就一定先执行完毕.还有,JDBC当中,默认事务是自动提交的.你在后面显式的提交也没有什么差别.(要不,你试一下,在第一个调用之前设置一下conn.setAutoCommit(false);,在最后commit之后在改回默认的conn.setAutoCommit(true);估计应该可行).
      

  4.   

     在插入第三张表之前,存储过程里用循环取数据进行判断.如果不能改存储过程的话,用JDBC隔长点连数据库查询也可以.