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

it2023-11-20  72

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; }

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

最新回复(0)