在执行  statement.executeBatch();  由于开始addBatch的顺序是随机的,这样很容易造成外键的问题,比如B表的B1字段外键到A表的A1字段,如果A表的insert语句顺序在B表前面,就不会出现问题,但是如果B表的顺序在前,执行  statement.executeBatch()的时候就会报外键的错误,想问这种问题有没有避免的方式,比如在批量执行的时候可以不检查外键的约束,在执行后再可以检查

解决方案 »

  1.   

    最好是在addBatch时就要务必保证好顺序。甚至先把所有A表的解决,再解决B表。
    临时取消外键约束是可以的,就是 disable 掉,不过要看是啥数据库,比如SQLServer:
      ALTER   TABLE   yourtable   NOCHECK   CONSTRAIT   ALL
    Oracle则是:
      ALTER   TABLE  table_name DISABLE CONSTRAINT constraint_name不过这样很危险。
      

  2.   

       用的mysql , 因为是通过导出的数据,然后生成的insert语句集合,关键是导出的数据的顺序是按表的名字排序,临时取消外键倒是可以,然后再全部执行完后,再检查这种不知道可以不
      

  3.   


    可以,前面说了,就是自己在导入开始和导入结束去执行对应的 DDL 语句就行了。