您的位置:首页 > 其它

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

2019-05-28 16:22 627 查看

  在之前完成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字段必须根据表名来命名,也就是说要保证规范的命名数据表字段。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: