簡體   English   中英

JSP搜索數據庫

[英]JSP search database

場景1:用戶想要找到管理員,誰的名字是jan。 他輸入'admin jan'或'jan admin'。 然后結果應該是:如果數據庫中有'jan'和'admin'的用戶,它將顯示該用戶。 即使有10個人在他們的電子郵件,街道名稱或其他內容中使用'jan'和'admin',它也應該顯示出來。 場景2:用戶希望找到具有'HQL PHP bebe SQL JAVA'技能的名為'bebe'的人。 它應該在數據庫中向每個用戶顯示這些單詞。 所以它應該只顯示具有這些技能和名稱的用戶,所以如果其他人沒有技能HQL,但確實具備PHP SQL JAVA技能,請不要顯示這一點。

我只搜索最后一個字。 因此,如果我搜索“這就是PHP SQL ADMIN”,它只會找到所有擁有ADMIN的人並忽略String的其余部分。

if (action.equals("searchUser")) {
    Session session = HibernateUtil.getSessionFactory().openSession();
    String searchQuery = request.getParameter("searchQuery");
    String[] query = searchQuery.split(" ");

    for (int i = 0; i < query.length; i++) {
        String hql = "FROM User WHERE username LIKE '%" + query[i] + "%' OR firstname LIKE '%" + query[i] + "%' OR lastname LIKE '%" + query[i] + "%' OR emailAddress LIKE '%" + query[i] + "%'";

        List<User> result = session.createQuery(hql).list();
        //set our results on the request and redirect back
        request.setAttribute("users", result);
        request.setAttribute("usersSize", result.size());
        request.setAttribute("usersSizeResults", result.size());

        System.out.println("size:" + result.size());
    }
    redirect(request, response, "/search.jsp");
    session.close();

}

HQL對使用的java類屬性區分大小寫。 User和class中的用戶名和名字是否完全聲明為?

可能是:

"FROM User WHERE (userName LIKE '%jan%' OR firstName LIKE '%jan%' OR lastName LIKE '%jan%' OR emailAddress LIKE '%jan%')"

在foreach循環中要小心:您對列表的每個參數進行查詢。 並且您只發送響應中的最后一個結果。 那正確嗎??

可能是:

    if (action.equals("searchUser")) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        String searchQuery = request.getParameter("searchQuery");
        String[] query = searchQuery.split(" ");

        List<User> usersFound = new ArrayList<User>();
        for (int i = 0; i < query.length; i++) {
            String hql = "FROM User WHERE username LIKE '%" + query[i] + "%' OR firstname LIKE '%" + query[i]
                    + "%' OR lastname LIKE '%" + query[i] + "%' OR emailAddress LIKE '%" + query[i] + "%'";
            List<User> result = session.createQuery(hql).list();
            if (result != null) {
                usersFound.addAll(result);
                System.out.println("size:" + result.size());
            }
        }

        // set our results on the request and redirect back
        request.setAttribute("users", usersFound);
        request.setAttribute("usersSize", usersFound.size());
        request.setAttribute("usersSizeResults", usersFound.size());

        redirect(request, response, "/search.jsp");
        session.close();
    }

試試這個以避免重復的值(未測試 ):

public void searchUser() {
if (action.equals("searchUser")) {
    Session session = HibernateUtil.getSessionFactory().openSession();
    String searchQuery = request.getParameter("searchQuery");
    String[] params = searchQuery.split(" ");

    // Found users
    List<User> usersFound = new ArrayList<User>();

    // Exact match
    String hqlMatch = this.getSearchHqlQuery(params, "AND");
    List<User> exactResult = session.createQuery(hqlMatch).list();
    if (exactResult!=null && !exactResult.isEmpty()) {
        usersFound.addAll(exactResult);
    }
    // Multiple search
    else {
        String hqlLike = this.getSearchHqlQuery(params, "OR");
        List<User> likeResult = session.createQuery(hqlLike).list();
        if (likeResult!=null && !likeResult.isEmpty()) {
            usersFound.addAll(likeResult);
        }
    }

    System.out.println("size:" + usersFound.size());
        // set our results on the request and redirect back
        request.setAttribute("users", usersFound);
        request.setAttribute("usersSize", usersFound.size());
        request.setAttribute("usersSizeResults", usersFound.size());

        redirect(request, response, "/search.jsp");
        session.close();
    }
}

private String getSearchHqlQuery(String[] params, String andOrfilter) {
    StringBuilder hql = new StringBuilder();
    hql.append("from User ");
    if (params.length > 0) {
        hql.append("where ");
        for (int i = 0; i < params.length; i++) {
            if (i > 0) { hql.append(andOrfilter); }
            hql.append(" (username like '%").append(params[i]);
            hql.append("%' OR firstname like '%").append(params[i]);
            hql.append("%' OR lastname like '%").append(params[i]);
            hql.append("%' OR emailAddress like '%").append(params[i]);
            hql.append("%') ");
        }
    }
    return hql.toString();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM