写了个最low的"多"条件查询,JDBC实现,记录一下。

来源:互联网 发布:filezilla是什么软件 编辑:程序博客网 时间:2024/05/10 14:19

第一步: 要什么自行车! 各种连接池,jar包先导进去,保证能连接数据库。

第二步: 写jsp页面,在写jsp的时候,缺什么就加什么。

  • 前台交互界面,将表单内容提交到doSelect.jsp页面。
<form action="doSelect.jsp" method="post">         性别:<input type="text" name="sex" /><br>        部门:<input type="text" name="deptno" /><br>        <input type="submit" value="提交" />    </form>
  • 后台处理界面,即doSelect.jsp,此页面处理大部分逻辑,对于我这种没逻辑的人来说,真是个挑战!
<%    request.setCharacterEncoding("UTF-8");    //在这里,用一个StringBuffer来装sql语句,当前台没有输入的时候默认查询所有。    StringBuffer sb = new StringBuffer("select * from emp where 1=1 '假装空格' ");//这里一定要留出空格,要不然SQL语句就挤在一起了!!!    //用Map来收容前台传来的字段    Map<String,Object> map = new HashMap<String,Object>();    String sex = request.getParameter("sex");    String deptno = request.getParameter("deptno");    //在这里展开判断,如果前台传来的字段非空,则放到map中    if(!(sex.equals(null)) && !(sex.equals(""))){        sb.append(" '假装空格' and sex=?");        map.put("sex", sex);    }    if(!(deptno.equals(null)) && !(deptno.equals(""))){        sb.append(" '假装空格' and deptno=?");        map.put("deptno", Integer.valueOf(deptno));    }    //在这里要用前面得到的sql和字段取数据库的数据,所以去写个Dao    //(想在这里建个传送门,走进Dao的世界,无奈不会)去下面看Dao吧    EmpDao ed = new EmpDao();    List<Emp> list = ed.getByDynamicSel(sb, map);-----------------------------------------------------------    //参数为doSelect.jsp页面判断完后的sql语句和字段    public List<Emp> getByDynamicSel(StringBuffer sb,Map<String, Object> map){         ...        //把sb里的内容(sql语句)赋值给sql        String sql = sb.toString();            ...        //在这里又要展开生死攸关的判断,如果前台界面有输入,并且也被放入了Map,那么就要用它来填充 '?'.        //在这里,突然发现了一个BUG,不过我很开心(哭~)        //要是第一个字段为空,那么,就只有一个'?',而且它是第一个        //下面却被固定为2        BUG前:           if(map.containsKey("sex")){            ps.setString(1,(String)map.get("sex"));         }        if(map.containsKey("deptno")){            ps.setInt(2, (Integer)map.get("deptno"));           }        ...        BUG后:        int index = 0;        try {            conn = DataBaseUtil.getConn();            ps = conn.prepareStatement(sql);            if(map.containsKey("sex")){                ps.setString(1,(String)map.get("sex"));                 index = 2;            }else{index = 1;}            if(map.containsKey("deptno")){                ps.setInt(index, (Integer)map.get("deptno"));               }    }    //这要是多几个条件基本就废了...    ```    ```    //最后根据条件得到的集合扔到show.jsp页面显示就好了.    if(list.size() >= 1){        request.setAttribute("emps", list);        request.getRequestDispatcher("show.jsp").forward(request, response);    }%>

水平有限,希望以后也是大神,如果有人来看并提出问题就再好不过了

原创粉丝点击