根據某個條件或者某些條件對資料庫進行查詢,然後把查詢結果進行分頁顯示
阿新 • • 發佈:2018-11-11
一、.固定條件,直接查詢資料庫,把結果進行分頁顯示出來;
見部落格
https://blog.csdn.net/qq_37591637/article/details/82951647
二、條件不定,查詢資料庫,把查詢結果進行分頁顯示
如下圖;包含四個條件,使用者在選擇的時候可以選擇一個條件、任意兩個條件、三個條件、全部條件進行查詢,
思路:
1,jjsp把使用者選擇的條件引數傳遞到A.servlet中;
2 在A.servlet中使用者選擇條件,根據條件組成一個sql語句,把這個沒有進行limit ?,?分頁的資料傳遞到一箇中介的B.servlet中
3.在B.servlet中,把這個sql語句進行分頁查詢
遇到的難點:
1.亂碼,:
整個過程涉及到:A.servlet傳遞引數到B.servlet 、 B.servlet傳遞引數到C.jsp 、C.jsp 傳遞引數到B.servlet 三個過程
其中 A.servlet傳遞引數到B.servlet C.jsp 傳遞引數到B.servlet 總有一個亂碼,怎麼處理都不行?總有一個正常一個亂碼?
解決方式:
一樣的引數,接受的時候用了兩個字串接受,分開處理;
A.servlet
package cn.com.servlet; import java.io.IOException; import java.net.URLDecoder; import java.net.URLEncoder; import java.util.HashMap; import java.util.Map; import java.util.Set; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import cn.com.pack.*; public class SearchCondition extends HttpServlet { /** * */ private static final long serialVersionUID = 1L; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //這個servlet的主要作用是根據使用者的選擇才查詢出想要的結果 String name=request.getParameter("name"); if(name!=null&&name!=""){ name = URLEncoder.encode(name, "ISO-8859-1"); name = URLDecoder.decode(name, "UTF-8"); } String number=request.getParameter("num"); if(number!=null&&number!=""){ number = URLEncoder.encode(number, "ISO-8859-1"); number = URLDecoder.decode(number, "UTF-8"); } String state=request.getParameter("states"); state = URLEncoder.encode(state, "ISO-8859-1"); state = URLDecoder.decode(state, "UTF-8"); String part=request.getParameter("organs"); part = URLEncoder.encode(part, "ISO-8859-1"); part = URLDecoder.decode(part, "UTF-8"); //1.1把收到的資訊都儲存到一個集合裡面,如果是空的就篩選掉,放進一個新的集合 //penson(假如你的資料放在物件中) Map<String,String> map =new HashMap<String,String>(); String sql =" select * from person_info where 1=1 "; Person_info person=new Person_info(); if(name!= null&&name!=""){ map.put("name",name); }else if(number!=null&&number!=""){ map.put("number",number); }else if(part!=null&&part!=""){ if(part.equals("全部")){ }else{ map.put("part",part); } } else if(state!=null&&state!=""){ if(state.equals("全部")){ }else{ map.put("state",state); } } Set<String> key = map.keySet(); for (String i : key) { sql=sql+"and "+i+"= '"+map.get(i)+"'"; } request.setCharacterEncoding("utf-8"); System.out.println("第一次傳過去的sql:"+sql); request.getRequestDispatcher("/SearchCondition_Media?sql="+sql).forward(request, response); } }
B.servlet
package cn.com.servlet; import java.io.IOException; import java.net.URLDecoder; import java.net.URLEncoder; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import cn.com.jdbc.JdbcUtils; import cn.com.pack.Person_info; @SuppressWarnings("serial") public class SearchCondition_Media extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 條件查詢媒介 // 1.資料庫裡面資料的總條數; int countpage = 0; request.setCharacterEncoding("utf-8"); String sql = request.getParameter("sql"); String sql1=request.getParameter("sqls"); if(sql1!=null&&!("".equals(sql1))){ sql1 = new String (sql1.getBytes("ISO-8859-1"),"UTF-8"); System.out.println("sql1:"+sql1); } if(sql==null||"".equals(sql)){ sql=sql1; } System.out.println("sql:" + sql); ResultSet rs0 = JdbcUtils.select(sql, null); List<Person_info> list = new ArrayList<Person_info>(); // 分頁查詢 try { while (rs0.next()) { countpage++; } } catch (SQLException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } // 每頁顯示多少行 int limt = 10; // 2.如果一頁是10條資料的話,那麼就是all頁 int all = (countpage / limt) + 1; // 這個是從前臺獲取的資料,是上一頁還是下一頁 int cpage = 1; // 這個是上一頁還是下一頁的資料 String currentpage = request.getParameter("currentpage"); if (currentpage == null || currentpage == "") { cpage = 1; } else { cpage = Integer.parseInt(currentpage); // 如果到了最後一頁,使用者再點選下一頁的時候跳轉到第一頁 if (cpage == (all + 1)) { cpage = 1; // 如果到了第一頁,使用者再點選下一頁的時候跳轉到最後一頁 } else if (cpage == 0) { cpage = all; } } // 3.開始查詢的資料 int start = limt * (cpage - 1); // 4.結束查詢的資料 int end = start + (limt - 1); // 這個程式碼是查詢資料庫裡面的person_info,然後迴圈遍歷顯示在頁面上 // sql語句的意思就是limit 索引,顯示索引以後多少行 String sqls = sql + " limit ?,?"; // 如果到了最後一頁的時候, if (end > countpage) { limt = countpage - start; } int sz[] = { start, limt }; ResultSet rs = JdbcUtils.selectint(sqls, sz); try { while (rs.next()) { Person_info pin = new Person_info(rs.getString(1), rs.getString(2), rs.getString(3), rs.getString(4), rs.getString(5), rs.getString(6)); list.add(pin); } request.setAttribute("list", list); request.setAttribute("cpage", cpage); request.setAttribute("all", all); request.setAttribute("address", "/Socket/SearchCondition_Media"); request.getRequestDispatcher("/Personnel_definition.jsp?sql="+sql).forward( request, response); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } // 1.2根據新的集合的來進行查詢 } }
C.jsp
<div id="center-right">
<!-- 人員資訊介面-->
<form action="/Socket/SearchCondition" method="post">
<br>
<span class="peo_left">人員名稱:<input type="text" name="name"/></span>
<span class="peo_left" style="margin-left: 117px;">人員編號:<input type="text" name="num"/></span><br>
<span class="peo_left">所屬機構:
<select name="organ" id="organ">
<option onclick="organ_se();">所有</option>
<option onclick="organ_se();">公司</option>
<option onclick="organ_se();">新龍專案部</option>
<option onclick="organ_se();">中礦</option>
</select>
</span>
<span class="peo_left">啟用狀態:
<select id="state">
<option onclick="state_se();">全部</option>
<option onclick="state_se();">啟用</option>
<option onclick="state_se();">禁用</option>
</select>
<span><input type="text" id="organs" name="organs" style="display: none;"/>
<input type="text" id="states" name="states" style="display: none;"/></span>
</span>
<span id="button">
<input type="submit" value="查詢" class="select"/>
<input type="reset" value="重置" class="select"/>
<input type="button" value="人員報表" class="select"/>
</span>
</form>
<br>
<div id="peo_info" style="height: 259px;">
<table style="width: 99%;">
<tr><td>人員名稱</td><td>人員編號</td><td>所屬部門</td><td>所屬工種</td><td>職務</td><td>啟用狀態</td><td><a href="Personnel_add.jsp">【添 加】</a></td></tr>
<c:forEach items="${list}" var="i" varStatus="status">
<c:if test="${status.index % 2 == 0}">
<tr style="background-color: white"><td class="list_p">${i.name}</td><td class="list_p">${i.number}</td><td class="list_p">${i.part}</td><td class="list_p">${i.kinds}</td><td class="list_p">${i.duty}</td><td class="list_p">${i.state}</td><td class="list_p"><a href="/Socket/Person_edit?name=${i.name}&&number=${i.number}">【編輯</a>|<a href="/Socket/Person_delete?name=${i.name}&&number=${i.number}">刪除</a>】</td></tr>
</c:if>
<c:if test="${status.index % 2 == 1}">
<tr style="background-color: #f2f7fa"><td class="list_p">${i.name}</td><td class="list_p">${i.number}</td><td class="list_p">${i.part}</td><td class="list_p">${i.kinds}</td><td class="list_p">${i.duty}</td><td class="list_p">${i.state}</td><td class="list_p"><a href="/Socket/Person_edit?name=${i.name}&&number=${i.number}">【編輯</a>|<a href="/Socket/Person_delete?name=${i.name}&&number=${i.number}">刪除</a>】</td></tr>
</c:if>
</c:forEach>
<tr><td>
<a href="<%=request.getAttribute("address") %>?currentpage=${cpage-1}&&sqls=<%=request.getParameter("sql")%>">上一頁</a></td><td>第${cpage}頁</td><td><a href="<%=request.getAttribute("address") %>?currentpage=${cpage+1}&&sqls=<%=request.getParameter("sql")%>">下一頁</a></td><td>總共<%=request.getAttribute("all") %>頁</td></tr>
</table>
</div>
</div>