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

来源:csdn博客 分类: 文章浏览史 发布时间:2021-09-12 18:48:02 最后更新:2021-09-12 浏览:59
转载声明:
本文为摘录自“csdn博客”,版权归原作者所有。
温馨提示:
为了更好的体验,请点击原文链接进行浏览
摘录时间:
2021-09-12 18:48:02

第一步: 要什么自行车! 各种连接池,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);
    }

%>

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

php技术微信