解决项目中由于前端页面数据类型跟数据库类型不一致,导致获取数据为空引起问题

前言

自己在项目中,其实每天都在遇到问题,每天都需要去解决,所以,希望做一个备忘记录,日后可以不再重复犯错。


问题描述

简单描述一下自己的问题,标题实在是无法描述清楚我的问题,这是我的商品页面,下面详情页面是加载出所有的商品信息,查询条件是根据需求输入搜索条件,然后查出结果,显示在下面,搜索框条件可以选择填写。

问题就出在这个搜索框,因为从前端页面页面获取的min,max数据类型是string类型,我在数据库后面库存Stock定义的是int类型,因此需要把获取的min和max转换成int型处理,

本来一句简单的Integer.parseInt()把获取的参数转化成Int型就可以了,但是以为项目中的搜索框里面的内容是可以不填的,不要求全部都有值,带来的问题就是request.getParameter()获取的为空,Integer.parseInt( )括号里不能为空,因此就涉及到取值总是报错,后来定位到这以后,就需要考虑,怎么去处理为空的情况!



解决方案

	public List selectByCondition(int shop_id,String item_id, String item_name, String category_name,String min, String max)
			throws SQLException {
		QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
		String sql =" select * from item where fk_shop_id = ?";
		List list = new ArrayList();
		list.add(shop_id);
		if(!"".equals(item_id.trim())){
			sql+=" and item_id =?"; //  不能在这写%   %'1002'%		
			list.add(item_id);// '%1002%'
		}
		
		if(!"".equals(category_name.trim())){
			sql+=" and category_name=?";
			list.add(category_name.trim());
		}
		
		if(!"".equals(item_name.trim())){
			sql+=" and item_name like ?";
			list.add("%"+item_name.trim()+"%");
		}
		
		if(!"".equals(min.trim())){
			sql+=" and stock>?";
			int mi = Integer.parseInt(min.trim());   //处理数据转型
			list.add(mi);
		}
		if(!"".equals(max.trim())){
			sql+=" and stock< ?";
			int ma = Integer.parseInt(max.trim());  ////处理数据转型
			list.add(ma);
		}
		return qr.query(sql, new BeanListHandler(Item.class), list.toArray());
	}
后来在数据库层,上文处做了处理,因为在这里可以先分析是否为空,如果不为空,再将String类型转化成Int型,这样就不用担心Integer.parseInt(max.trim())括号里为空的空指针异常了,同时这段代码也很好的解决了搜索框随机输入时,动态添加搜索条件完成搜索的功能。

总结如上,如果有更好的办法,欢迎提出探讨,互相学习!


你可能感兴趣的:(总结)