1. 程式人生 > >根據某個條件或者某些條件對資料庫進行查詢,然後把查詢結果進行分頁顯示

根據某個條件或者某些條件對資料庫進行查詢,然後把查詢結果進行分頁顯示

一、.固定條件,直接查詢資料庫,把結果進行分頁顯示出來;

見部落格

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">【添&nbsp;&nbsp;&nbsp;&nbsp;加】</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>