包装一个查询下拉框数据的工具类
在之前完成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字段必须根据表名来命名,也就是说要保证规范的命名数据表字段。
- 将SQL SERVER中查询到的数据导成一个Excel文件
- mysql查询时将多数据放在一个返回结果
- SharedPreferences是一种用来存储简单的数据的一个工具类,也就是简单数据的持久化
- 如何用SQL语句查询一个数据表所有字段的类型
- hibernate查询某一个表所有数据
- Oracle一个用户查询另一个用户的表数据
- hibernate 查询Page 只要有一个字段为null 查出来的整条数据都为null
- (数据库篇) SQL查询~ 存在一个表而不在另一个表中的数据
- 下拉框数据查询
- X++双向关联查询数据,初始化下拉选项
- 从一个表中查询数据 插入到另外一个表
- SQL查询~ 存在一个表而不在另一个表中的数据
- Ext.grid.EditorGridPanel单元格内套用下拉列表,且列表数据为动态加载,支持模糊查询,有描述信息
- 结合AnyChart做报表:一个生成AnyChart图形XML数据的工具类
- 把一张表中的数据即一个List作为查询另一张表的条件参数
- hibernate查询数据表char类型字段只返回一个字符
- 怎样查询SQL数据库中某一个表中的某个列的一个数值的所有行数据
- mysql数据库中,查询一个表的下一条数据减上一条数据的值的写法
- 多线程多次查询数据生成一个文件——解决内存溢出
- delphi中将一个ADOQuery查询的数据结果传递给一个动态生成的ADOQuery