包装一个查询下拉框数据的工具类

  在之前完成MVC项目的过程中,接触了很多下拉框的数据的绑定。那个时候每绑定一个下拉框就需要写一段查询下拉框数据的代码。现在学习了Java之后,突然就想是不是可以把那些查询数据的代码包装成一个,因为那些查询数据的代码都大同小异,唯一改变的只是查询不用的表而已。进过一番研究,可算是弄出来了。现在分享给大家,有问题也欢迎大家指出。
  接下来我们说一下绑定下拉框的步骤:
  准备环境:因为下拉框需要两个值,一个id值,一个name值,那么需要准备一个实体类,这个实例类中就放两个成员变量,分别为id,name。代码如下

public class SelectVo {
	private int id;
	private String name;
	public SelectVo() {
	}
	public SelectVo(int id, String name) {
		this.id = id;
		this.name = name;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}

  编写查询方法:实体类建好后开始写查询数据的方法,因为我们需要返回一个包含数据的实体类集合,所以给这个方法一个实例类集合的返回类型。这个方法还需要一个String类型的参数,这个参数其实就是表名,上面已经说了,查询的代码都是大同小异的,唯一不同的就是表名了。所以这里给这个参数传一个表名过来。
  方法的内容就是根据这个表名中的下划线进行分割,对分割后的第二个字符进行处理,得到我们需要查询的表中的id和name字段。然后把这些字段和表名拼接到sql查询语句中。接下来就是正常的查询与赋值了。这里为了给下拉框加上第一条请选择选项,给实体类定义了一个构造函数用来设置值,并在最后需要返回的集合的第一个位置插入了这条数据。代码如下

public static List<SelectVo> BindingBox(String tablename) {
	Connection con = null;
	PreparedStatement ps = null;
	ResultSet rs = null;
	List<SelectVo> list = null;
	try {
		String str[] = tablename.split("_");
		String id = str[1].toUpperCase() + "ID";
		String name = str[1].toUpperCase() + "NAME";
		String sql = "SELECT " + id + "," + name + " FROM "
				+ tablename.toUpperCase();
		con = JdbcUitl.getConnection();
		ps = con.prepareStatement(sql);
		rs = ps.executeQuery();
		list = new ArrayList<SelectVo>();
		SelectVo selectVo = null;
		while (rs.next()) {
			selectVo = new SelectVo();
			selectVo.setId(rs.getInt(id));
			selectVo.setName(rs.getString(name));
			list.add(selectVo);
		}
		SelectVo selectVo2 = new SelectVo(0, "--请选择--");
		list.add(0, selectVo2);
	} catch (SQLException e) {
		e.printStackTrace();
	} finally {
		JdbcUitl.close(con, ps, rs);
	}
	return list;
}

  最后就是在Servlet调用写好的查询数据的方法,并把结果集给到jsp,在jsp使用<c:forEach>标签遍历结果集依次添加数据。代码如下:
  Servlet代码:

public void BindingBox(HttpServletRequest request,
		HttpServletResponse response) throws ServletException, IOException {
	List<SelectVo> list = BindingBoxUtil.BindingBox("b_commodity");
	if (list != null) {
		request.setAttribute("lists", list);
		request.getRequestDispatcher("/jsp/Login.jsp").forward(request,
				response);
	} else {
		request.getRequestDispatcher("/servlet/UserServlet").forward(
				request, response);
	}
}

  Jsp代码:

<select id="userid">
	<c:forEach items="${lists}" var="list">
		<option value="${list.id}">${list.name}</option>
	</c:forEach>
</select>

  
结果图:
在这里插入图片描述
  总结:这样写的确是方便的很多,省去了一些代码,但同时,这样写有一个缺陷,相信你们在上面的代码中已经发现了,这个缺陷就是在处理字段的时候被写死了,所以就要保证那些需要用来绑定下拉框的数据表的id和name字段必须根据表名来命名,也就是说要保证规范的命名数据表字段。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值