欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于java中exception的一些想法

程序员文章站 2022-03-13 09:38:24
...

数据库大作业中有一个用户登录函数,我密码错误的情况下依旧能够登录进去,而"密码错误"的报错只出现在控制面板中
关于java中exception的一些想法

后来在询问同学后,修改代码如下

public BeanUser login(String userid, String pwd) throws BaseException {
		// TODO Auto-generated method stub
		
		if (pwd==null||"".equals(pwd)) {
			throw new BusinessException("密码不能为空");
		}
		else if (userid==null||"".equals(userid)) {
			throw new BusinessException("用户名不能为空");
		}
		
		Session session = HibernateUtil.getSession();
		org.hibernate.Transaction transaction = session.beginTransaction();
		BeanUser beanUser = new BeanUser();
		try {
			
			beanUser = session.get(BeanUser.class, userid);
			if(beanUser==null) {
				throw new BaseException("用户不存在");
			}
			//比较密码
			if(beanUser.getUserPwd().equals(pwd)==false) {
				throw new BaseException("密码错误");
			}
			
			transaction.commit();
		} catch (SessionException e) {
			// TODO: handle exception
			e.printStackTrace();
			throw new BaseException("登录失败");
		}finally {
			if(session!=null) {
				try {
					session.close();
				} catch (SessionException e) {
					// TODO: handle exception
					e.printStackTrace();
				}
			}
		}
		return beanUser;

	}

在try-catch中,写成catch (Exception e)会弹出登录失败,而写成catch (SessionException e)会弹出密码错误,一开始想不明白,后来发现是因为我java没学好,????

BaseException不会被catch (SessionException e)捕获,但是会被catch (Exception e)捕获.所以用catch (SessionException e)会输出密码错误,但是用catch (Exception e)会显示登录失败