代码之家  ›  专栏  ›  技术社区  ›  Java Dev Beginner

使用“%”条件像sql一样搜索本机sql

  •  0
  • Java Dev Beginner  · 技术社区  · 2 年前

    我有一个连接PL/SQL搜索的代码,比如使用“%”,我使用条件来实现

    String sql = "SELECT * FROM EMPLOYEE ";
    Query query = entityManager.createNativeQuery(sql.toString());
    
    if(searchCharacterInfo.getKeyword() != null){
          sql += " WHERE NAME LIKE %:keyword% ";
          query = entityManager.createNativeQuery(sql).setParameter("keyword", keyword);
    }
    
    List<Object> res =  query.getResultList();
    return res;
    

    当我运行此代码以显示错误时:

    Could not locate named parameter keyword
    

    请帮我解决这个问题! 谢谢

    2 回复  |  直到 2 年前
        1
  •  0
  •   Amadan    2 年前

    参数占位符不仅仅是盲目地替换为占位符值,所以 %:keyword% 这不是一个合法的语法。

    你需要 LIKE :keyword 在SQL中,并将关键字作为 "%" + keyword + "%" 从Java方面来说。

    或者,您可以在SQL端连接字符串: LIKE ('%' || :keyword || '%') .

        2
  •  0
  •   Mazhar Ibna Zahur    2 年前

    假设你有一个模范员工。因此,您可以编写如下标准:

            CriteriaBuilder cb = entityManager.getCriteriaBuilder();
            CriteriaQuery<EMPLOYEE> cq = cb.createQuery(EMPLOYEE.class);
            Root<EMPLOYEE> employee = cq.from(EMPLOYEE.class);
            cq.select(employee);
            List<Predicate> predicates = new ArrayList<>();
            if (searchCharacterInfo.getKeyword() != null) {
                predicates.add(cb.like(employee.get("name"), "%" + searchCharacterInfo.getKeyword() + "%"));
            }
        
            cq.where(predicates.toArray(new Predicate[0]));
            List<EMPLOYEE> res =  entityManager.createQuery(cq).getResultList();