唯一的果果 2017-09-29 03:44 采纳率: 0%
浏览 682

关于导入修改的问题,求大神解答

修改导入是导入数据对数据库中的数据进行修改,因为用户的手机号和邮箱不能重复,我是先判断这个手机号或者邮箱在数据库中存不存在,然后再判断是不是这个用户本人的,然后这样循环,我做的性能很差。有什么好的改进措施么。代码如下:
private List checknewList(List userList) {

    List<LoginInfo> loginInfoNameList = userDAO.getUserLoginName();
    List<LoginInfo> loginInfoPhoneList = userDAO.getUserLoginPhone();
    List<LoginInfo> loginInfoEmailList = userDAO.getUserLoginEmail();
    List<String>    deptnoList = userDAO.getDpetnos();
    List<String>    rolesList = userDAO.getroles();

    List<ExcelErrInfo> errorlist = new ArrayList<ExcelErrInfo>();
    Map<String,LoginInfo> dbloginnamecheckmap = loginInfoNameList.stream().collect(  
            Collectors.toMap(LoginInfo::getLoginname, (p) -> p));
    Map<String,LoginInfo> dbloginphonecheckmap = loginInfoPhoneList.stream().collect(  
            Collectors.toMap(LoginInfo::getLoginphone, (p) -> p));      
    Map<String,LoginInfo> dbloginmailcheckmap = loginInfoEmailList.stream().collect(  
            Collectors.toMap(LoginInfo::getLoginemail, (p) -> p));


    Map<String,String> deptnomap = deptnoList.stream().collect(  
            Collectors.toMap((p) -> p, (p) -> p));

    Map<String,String> rolesmap = rolesList.stream().collect(  
            Collectors.toMap((p) -> p, (p) -> p));
    Map<String,Integer> loginphonecheckmap = new HashMap<String, Integer>();
    Map<String,Integer> loginmailcheckmap = new HashMap<String, Integer>();

    for (int i = 0, len = userList.size(); i < len; i++)
    {
        DBUser temp = userList.get(i);
        String msg = "";
        msg = checkOneuserInfo(temp);

        if(!temp.getLoginname().equals("")){
            if(dbloginnamecheckmap.containsKey(temp.getLoginname())) {
                                        if(!temp.getLoginphone().equals("")){
                    if(dbloginphonecheckmap.containsKey(temp.getLoginphone())) {

                        if(!temp.getLoginphone().equals(userDAO.getNewUserLoginPhone(temp.getLoginphone()))) {
                            msg=msg+"该登录手机号码已注册;";
                                    loginphonecheckmap.put(temp.getLoginphone(),i+2);
                                    }
                    }       
                }
                        if(!temp.getLoginemail().equals("")){
                    if(dbloginmailcheckmap.containsKey(temp.getLoginemail())) {
                        if(!temp.getLoginemail().equals(userDAO.getNewUserLoginEmail(temp.getLoginemail()))) {
                            msg=msg+"该登录手机邮箱已注册;";
                                    loginmailcheckmap.put(temp.getLoginemail(),i+2);
                                    }
                    }
                }
                        主要效率就在这里  后面的就不贴了,贴下userDAO的代码,很简单就是从数据库里取
  • 写回答

1条回答 默认 最新

  • threenewbee 2017-09-30 20:25
    关注

    在数据库里做唯一约束或者联合主键,就可以防止你插入相同的数据了。

    评论

报告相同问题?

悬赏问题

  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)
  • ¥20 matlab yalmip kkt 双层优化问题
  • ¥15 如何在3D高斯飞溅的渲染的场景中获得一个可控的旋转物体
  • ¥88 实在没有想法,需要个思路
  • ¥15 MATLAB报错输入参数太多
  • ¥15 python中合并修改日期相同的CSV文件并按照修改日期的名字命名文件
  • ¥15 有赏,i卡绘世画不出
  • ¥15 如何用stata画出文献中常见的安慰剂检验图
  • ¥15 c语言链表结构体数据插入