现在做一个从excel导数据到数据库中,用java实现的,现在的问题是excel中的几列中的数据填写的是名称,导入时要校验名称在数据库中是否存在,如果存在则保存其id到数据库中,如果数据少的话没有什么问题,如果现在数据多的话怎么办?
比如说现在excel中有n万行数据,其中一列是姓名、一列是学历,......,而存放姓名那张表有几十万条数据,学历那个有几十万条数据,怎么验证和得到其id比较好呢。总不能每次从数据库中查,也不能一次都加载到内存,急啊!!!!

解决方案 »

  1.   

    我刚做了一个excel导入的模块,也是验证重复的问题,先验证excel中某些字段不能重复,然后再跟数据库比较,我只能用for嵌套对比,数据太多了还真是个问题啊。。
      

  2.   

    思路大概是这样的,建立一个中间表,字段包含那个excel中所有的列,外加一个id字段,将excel表的数据插入到这个中间表中(假设为B表),姓名那个表假设为A表,待B数据插入完毕后,关联更新B表的id(update B set B.id=(select A.id from A where A.name=B.name)),然后将B表中id不为空的记录插入要需要的C表中(insert into C(clom1,colm2...) select c1,c2... from B where b.id is not null)
    e.gcreate table a
    (id int,
     name varchar(20)
    );
    insert into a values(1,'aaa');
    insert into a values(2,'bbb');
    insert into a values(3,'ccc');
    insert into a values(4,'ddd');
    insert into a values(5,'eee');
    insert into a values(6,'fff');
    create table b
    (id int,
     name varchar(20)
    );
    insert into b(name) values('aaa');
    insert into b(name) values('bbb');
    insert into b(name) values('ccc');
    insert into b(name) values('ggg');
    insert into b(name) values('hhh');
    insert into b(name) values('iii');
    --关联更新B中的数据
    update b set b.id=(select a.id from a where a.name=b.name);
    --将B中id不为空的数据保存到需要的C表中
    insert into C(clom1,colm2...) select c1,c2... from B where b.id is not null
      

  3.   

    放到数据库层面去做,如oracle的merge into语句,大概意思是入库的时候数据库会自动根据你的条件判断,如在数据库已存在将不入库。效率肯定比你用代码实现高很多倍!