JavaWeb中根据条件进行组合查询之SQL的拼接

JavaWeb中根据条件进行组合查询之SQL的拼接

在日常开发中,我们经常会遇到一些组合查询的情况,例如根据多个输入框的值来进行一个条件查询,而条件的多少取决于用户在多少个输入框中输入了值,而作为开发者,我们要做的就是明确用户输入的不确定性,通过拼接SQL的方式处理用户输入的参数,废话不多说,肝代码!

// 组合查询:根据输入条件的个数查询数据
 public static ArrayList<Emp> queryEmpByGroup(String ename,Double sal,String job) {
  Connection conn=null;
  PreparedStatement stat=null;
  ResultSet rs=null;
  Emp emp=null;
  ArrayList<Emp> empList=new ArrayList<>();
  //获取数据库连接对象
  conn=DBUtil2.getConnection();
  try {
//   SQL:如果姓名不为null 根据姓名查询;姓名和工资都不为null,就按姓名和工资查询
//使用StringBuffer类型来存储SQL字符串,也可以使用StringBuilder。where后放1=1方便后面拼接,以免所有参数为空时出错
   StringBuffer sql=new StringBuffer("select * from emp where 1=1");
//   如果ename不为null并且不为空字符串那么拼接到sql中
   if(ename!=null && !"".equals(ename.trim())) {
    sql.append(" and ename like '%"+ename+"%'");
   }
//   如果sal不为null并且大于0那么拼接到sql中
   if(sal!=null && 0<sal) {
    sql.append(" and sal>"+sal);
   }
//   如果job不为null并且不为空字符串那么拼接到sql中
   if(job!=null && !"".equals(job.trim())) {
    sql.append(" and job ="+job);
   }
// 获取数据库操作对象,并进行预编译,避免SQL注入
   stat=conn.prepareStatement(sql.toString());
// 执行SQL语句并将结果存入结果集中
   rs=stat.executeQuery();
//如果结果集不为空,才在堆中给emp分配内存,并将结果集中对应的值初始化给对象
   while(rs.next()) {
    emp=new Emp();
    emp.setComm(rs.getDouble("comm"));
    emp.setEmpno(rs.getInt("empno"));
    emp.setHiredate(rs.getDate("hiredate"));
    emp.setMgr(rs.getInt("mgr"));
    emp.setEname(rs.getString("ename"));
    emp.setSal(rs.getDouble("sal"));
    //将每个对象放入List集合中
    empList.add(emp);
   }
  } catch (Exception e) {
   e.printStackTrace();
  }finally {
  //关闭资源
   DBUtil2.colseResource(conn, stat, rs);
  }
  return empList;
 }

本人用来帮助记忆的文章,不喜勿喷…

©️2020 CSDN 皮肤主题: 1024 设计师:上身试试 返回首页