java - 如何使用java检查查询是否为空

标签 java sql spring

我正在使用 spring 框架,我使用的代码无法工作或检查查询是否为空,尽管我使用了 .isEmpty() 方法,但这并不意味着查询为空。我想确保我的查询为空,因为我的代码的一部分确实调用了 id,在这种情况下,即使它为空,我也没有调用,所以请帮助我 T.T

public List<Object> searchEmployee(EmployeeSearchDto data) {
    Session session = sessionFactory.openSession();
    final String CRITERIA_EMPLOYEEID = "emp.employeeID =:id";
    final String CRITERIA_EMPLOYEEID2 = "emp.employeeID LIKE:id";
    final String CRITERIA_POSITION= "emp.positionID =:posID";
    final String CRITERIA_DEPARTMENT="emp.departmentID =:deptID";
    final String CRITERIA_WORKPLACE = "emp.workplaceID =:workID";

    Boolean selected_dept = false;
    Boolean selected_pos = false;
    Boolean selected_work = false;
    Boolean input_empID = false;
    Boolean input_empName = false;
    firstName = "";
    middleName = "";
    lastName = "";
    completeName = "";
    firstLastName = ""; 

    List<String> criteria = new ArrayList<>();
    List<Object> employees = null;

    // checking the fields if all the fields is empty
    try{
        //one by one check the select field
        String query = "Select"
                + " emp.employeeID,"
                +"emp.firstName,"
                +"emp.middleName,"
                +"emp.lastName,"
                +"pos.positionName,"
                +"dept.deptName,"
                +"work.workplaceName"
                +"from Employee emp "
                + "INNER JOIN Department dept "
                    + "ON emp.departmentID = dept.deptID " 
                + "INNER JOIN Position pos " 
                    + "ON emp.positionID = pos.positionID "
                + "INNER JOIN Workplace work " 
                    + "ON emp.workplaceID = work.workplaceID ";

                if(!data.isEmpty()) {

                    query = query.concat("WHERE ");
                    if(data.getEmployeeID()!="" && data.getEmployeeID()!=null) {    
                        criteria.add(CRITERIA_EMPLOYEEID2);
                        System.out.println("Employee IDs");
                        input_empID = true;
                    } 

                    if(data.getEmployeeName()!="" && data.getEmployeeName()!=null){ 
                        criteria.add(nameCriteriaHelper(data.getEmployeeName()));
                        System.out.println("Employee Name AKOOO");
                        input_empName = true;
                    }

                    if(data.getDepartmentID()!=0) {
                        criteria.add(CRITERIA_DEPARTMENT);
                        System.out.println("Dept ID ");
                        selected_dept = true;
                    }
                    if(data.getPositionID()!=0) {
                        criteria.add(CRITERIA_POSITION);
                        System.out.println("POS ID ");
                        selected_pos = true;
                    }
                    if(data.getWorkplaceID()!=0) {
                        criteria.add(CRITERIA_WORKPLACE);
                        selected_work = true;
                    }

                    query = query.concat(String.join(" OR ", criteria));
                }
                query = query.concat(" ORDER BY emp.joinDate DESC");
                System.out.println("QUERY: " + query);
                Query q = session.createQuery(query);
                if(input_empID) {
                    q.setParameter("id", "%" + data.getEmployeeID() + "%");
                }
                if(input_empName) {
                    if(searchbyOne)
                        q.setParameter("inputName", "%" + data.getEmployeeName() + "%");
                    if(searchbyFandL)
                        q.setParameter("firstLastName", "%" +firstLastName+ "%");
                    if(searchbyCompName)
                        q.setParameter("completeName", "%" +completeName+ "%");
                }

                if(selected_dept) {
                    q.setParameter("deptID", data.getDepartmentID());
                }
                if(selected_pos) {
                    q.setParameter("posID", data.getPositionID());
                }
                if(selected_work) {
                    q.setParameter("workID", data.getWorkplaceID());
                }
                employees = (List<Object>) q.list();
    }catch(Exception e){
        e.printStackTrace();
    }finally{
        session.close();
    }

    return employees;
}
public String nameCriteriaHelper(String name) {
    searchbyOne = false;
    searchbyFandL = false;
    searchbyCompName = false;

    final String noOfTokens_1 = "CONCAT(emp.lastName,'  ',emp.firstName, ' ',emp.middleName) LIKE :inputName";
    final String noOfTokens_2 = "(CONCAT(emp.lastName, ' ', emp.firstName) LIKE :firstLastName "
            + "OR CONCAT(emp.firstName, ' ', emp.lastName) LIKE :firstLastName)";
    final String noOfTokens_3 = "CONCAT(emp.lastName,' ',emp.firstName, ' ',emp.middleName) LIKE :completeName";

    StringTokenizer stringTokenizer = new StringTokenizer(name);
    int no_of_tokens = stringTokenizer.countTokens();

    switch(no_of_tokens) {
    case 1: searchbyOne = true;
            return noOfTokens_1;
    case 2: firstName = stringTokenizer.nextToken();
            lastName = stringTokenizer.nextToken();
            firstLastName = lastName + " " + firstName;
            searchbyFandL = true;
            return noOfTokens_2;

    default: int counter = 0;
            while( counter < (no_of_tokens - 2)) {
            firstName = firstName.concat(stringTokenizer.nextToken() + " ");
            counter++;
            }

            firstName = stringTokenizer.nextToken();
            middleName = stringTokenizer.nextToken();
            lastName = stringTokenizer.nextToken();
            completeName = lastName + " " + firstName + " " + middleName;
            searchbyCompName = true;
            return noOfTokens_3;

    }

最佳答案

您使用错误的顺序和错误的函数来比较字符串:

替换:

data.getEmployeeID()!="" && data.getEmployeeID()!=null

data.getEmployeeID() != null && !data.getEmployeeID().equals("")

比较字符串必须使用equals()。在访问 equals 方法之前,应首先检查 null

您也应该纠正上述其他条件。

关于java - 如何使用java检查查询是否为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50265411/

相关文章:

c# - Sqlite 与 C# 和 where 子句

java - Jackson 在构造函数中使用 @JsonProperty 名称进行序列化

java - Spring MVC 基于 Java 的配置 - JSP 无法解析

java - Android 从另一个类启动 Activity

java - 我想用默认属性覆盖字段输入中的值

sql - 使用 Amazon Redshift/PostgreSQL 进行漏斗查询

sql - 如何使用 SQL 语言访问 netsuite 数据

java - sql根据日期删除

java - Java 中的异常

spring - 在Spring MVC中,如何找出页面加载时间?